Hibernate hiberante query language(一对多的操作)
2016-09-24 22:23
441 查看
等值连接
SELECT c.*,s.* FROM Classes c,Student s WHERE c.cid=s.cid
内连接
SELECT c.*,s.* FROM Classes c INNER JOIN Student s ON (c.cid = s.cid)
左外连接
SELECT c.*,s.* FROM Classes c LEFT OUTER JOIN Student s ON c.cid = s.cid
public class OneToMoreTest extends HibernateUtil{ /** #等值连接 SELECT c.*,s.* FROM Classes c,Student s WHERE c.cid=s.cid */ @Test public void testEQ(){ Session session=sessionFactory.openSession(); Query query=session.createQuery("from com.sanmao.utils.Classes c" + ",com.sanmao.utils.Student s where c.cid=s.cleass.cid"); List list=query.list(); // 返回的是一个Object数组,元素包括Object(Classes Student) session.close(); } /** #内连接 SELECT c.*,s.* FROM Classes c INNER JOIN Student s ON (c.cid = s.cid) */ @Test public void testIN(){ Session session=sessionFactory.openSession(); Query query=session.createQuery("from com.sanmao.utils.Classes c inner join c.students s"); List list=query.list(); // 返回的是一个Object数组,元素包括Object(Classes Student) // 和等值效果相同 session.close(); } /** 左外连接 SELECT c.*,s.* FROM Classes c LEFT OUTER JOIN Student s ON c.cid = s.cid */ @Test public void testLO(){ Session session=sessionFactory.openSession(); Query query=session.createQuery("from com.sanmao" + ".utils.Classes c left outer join c.students s"); List list=query.list(); // 返回的是一个Object数组,元素包括Object(Classes Student) // 和等值效果相同 session.close(); } /** * 迫切内连接 * */ @Test public void testInner_Fetch(){ Session session=sessionFactory.openSession(); Query query=session.createQuery("from com.sanmao" + ".utils.Classes c inner join fetch c.students s"); List<Classes> list=query.list(); //返回所有拥有学生的班级 for (Classes classes: list ) { System.out.println(classes); } session.close(); } /** * 迫切外连接 * */ @Test public void testOuter_Fetch(){ Session session=sessionFactory.openSession(); Query query=session.createQuery("from com.sanmao" + ".utils.Classes c left outer join fetch c.students s"); //返回所有班级,包括有学生和没有学生的班级 List<Classes> list=query.list(); for (Classes classes: list ) { System.out.println(classes); } session.close(); } /** * 两个字段来自不同的表的查询 * 值得注意的是 当用new 的时候会和 fetch (迫切连接)造成冲突 * */ @Test public void testClassesView(){ Session session=sessionFactory.openSession(); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append("select new com.sanmao.utils.ClassesView(c.name,s.name)"); stringBuffer.append("from Classes c inner join c.students s"); List<ClassesView> list=session.createQuery(stringBuffer.toString()).list(); for (ClassesView cv: list ) { System.out.println(cv); } session.close(); }
}
相关文章推荐
- Vi 简介 linux操作
- redis常用操作、 redis操作键值、 redis安全设置
- Perl的文件操作(1)(适合初学者)
- Perl的文件操作(2)(适合初学者)
- 不刷新页面动态更新select选项,实现两个select相互操作
- SMTH Java FAQ (3) 文件与磁盘操作(菜鸟必看)
- 用Java通过DIIOP远程操作Domino服务器
- 简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。
- 在ASP.NET 2.0中操作数据之十二:在GridView控件中使用TemplateField
- 用ASP实现对ORACLE数据库的操作
- 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换
- 一组有用的操作Excel的函数
- 在VC中自建操作BMP位图文件的类
- OpenSource产品的商业操作模式
- [Visual Basic]VB源码推荐:一个操作Ini文件的类
- 在C、JAVA、PHP中操作postgreSql数据库
- VB千里行-操作Word与Excel
- JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.
- 在Delphi中操作快捷方式
- Java语言入门 -- 第九章 Java的输入输出操作