hibernate inner join lazy="false"
来源:互联网 发布:plugin.js插件 编辑:程序博客网 时间:2024/04/28 02:21
使用inner join子句可以实现内连接,只要两个持久化类对应的两个表的关联字段之间有相符的值,内连接将组合两个表中的连接。内连接在一对多(多对一)的关联中是最常见的一连接。如:
String hql = "select p from Product p inner join p.category";
Query query = session.createQuery(hql);
List<Product> list = query.list();
/**
* 测试使用内连接
*/
public void testUseInnerJoin(){
Session session = null;
session = HibernateUtils.getCurrentSession();
String hql = "select p from Product p inner join p.category";
Query query = session.createQuery(hql);
List<Product> list = query.list();
HibernateUtils.closeSession(session);
for(Product obj : list){
System.out.println(obj.toString());
}
}
这里注意的是要在多一方设置lazy=”false”属性,否则在显示查询结果会抛出迟延加载的异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at com.kkoolerter.hibernate.beans.Category$$EnhancerByCGLIB$$228a9fa6.toString(<generated>)
at com.kkoolerter.hibernate.beans.Product.toString(Product.java:67)
at HQLTest.testUseInnerJoin(HQLTest.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
String hql = "select p from Product p inner join p.category";
Query query = session.createQuery(hql);
List<Product> list = query.list();
/**
* 测试使用内连接
*/
public void testUseInnerJoin(){
Session session = null;
session = HibernateUtils.getCurrentSession();
String hql = "select p from Product p inner join p.category";
Query query = session.createQuery(hql);
List<Product> list = query.list();
HibernateUtils.closeSession(session);
for(Product obj : list){
System.out.println(obj.toString());
}
}
这里注意的是要在多一方设置lazy=”false”属性,否则在显示查询结果会抛出迟延加载的异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at com.kkoolerter.hibernate.beans.Category$$EnhancerByCGLIB$$228a9fa6.toString(<generated>)
at com.kkoolerter.hibernate.beans.Product.toString(Product.java:67)
at HQLTest.testUseInnerJoin(HQLTest.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
- hibernate inner join lazy="false"
- hibernate 单向关联一对一 lazy="false"
- Hibernate中lazy="false"怎么理解?
- Hibernate inner join on
- Hibernate (inner join on)
- Hibernate inner join left join
- Hibernate中使用openSessionInView代替lazy="false"的方法
- inner/outer join in hibernate
- inner/outer join in hibernate
- inner/outer join in hibernate
- hibernate的xml配置中<class table="ADDRESS" lazy="false"对应的annotation配置
- hibernate之HQL之inner join
- Hibernate中outer-join、lazy 、fetch join关键字的使
- Hibernate中outer-join、lazy 、fetch join关键字的使用
- Hibernate中outer-join、lazy 、fetch join关键字的使用
- Hibernate中outer-join、lazy 、fetch join关键字的使用
- lazy=false和lazy=true的区别
- Hibernate Criteria 关联查询(inner join 与 left join)
- JDK & JRE
- 编写简单的模板函数
- usb 与pci驱动的关系
- C++:输出日历的算法
- 随想录(再谈链表)
- hibernate inner join lazy="false"
- erlang断言
- LINUX mount -t用法
- SQL Server 数据库内部版本号
- android sdk创建AVD时如何更改AVD的存储路径
- heap_sort
- Android 滑动效果基础篇(四)—— Gallery + GridView
- android实现截屏
- svn 命令详解