hibernate left join 多表连接查询不到结果,但生成的查询语句在数据库可以查询
来源:互联网 发布:什么是网络pos机 编辑:程序博客网 时间:2024/05/17 06:12
这两天用到了SSH,被一个奇怪的问题纠结了好久,具体问题描述如下:
有两个表:Product 表和 ProductType,Product表中的类型字段引用了ProductType表的Id
hibernate配置文件如下:
Product(截取了部分)
<id name="giftId" type="integer">
<column name="_id"/>
<generator class="native" />
</id>
<property name="giftName" type="string">
<column name="_giftName"/>
</property>
<many-to-one name="giftType" class="com.wishes.www.model.ProductType" unique="true" cascade="all">
<column name="_giftType"/>
</many-to-one>
ProductType
<id name="typeId" type="integer">
<column name="_id"/>
<generator class="native" />
</id>
<property name="typeName" type="string">
<column name="_typeName"/>
</property>
<set name="products" inverse="true" cascade="all">
<key column="_id"></key>
<one-to-many class="com.wishes.www.model.Product"/>
</set>
现有SQL语句:String sql = select new Product(pro.giftId,pro.giftName,pro.giftSalePrice,pro.giftDiscount,pro.giftDiscribe)from Product as pro left join pro.giftType as tttt where pro.status = 1 and tttt.typName = "+typeName+"";(typeName为传入参数 '儿童玩具' )
List<Product> list = (List<Product>)ht.find(sql);
问题:这样是查询不到结果的,返回list.size() = 0,但是将控制台打印的语句复制到mysql查询工具是可以查询到的。
分析原因(个人理解,有可能不正确,呵呵):hibernate内部实现默认为lazy=true加载,被关联到的表,也就是Product对象引用到的ProductType对象的数据是不被加载的,除非在单个查询的session中显示的调用了ProductType对象的某个属性方法取值(但是ProductType的主键,也就是Product的外键是会加载的)。
解决方法:用主键来作为查询条件,也就是 String sql = select new Product(pro.giftId,pro.giftName,pro.giftSalePrice,pro.giftDiscount,pro.giftDiscribe)from Product as pro left join pro.giftType as tttt where pro.status = 1 and tttt.typName = "+typeId+"";(typeId为传入参数 '1' )
这样就能查询出结果了!!!!
其他认为可行的方法:重写HibernateTemplate.executeFind(...)方法,在一个事物中完成相关属性的访问,虽然我没用,但是应该是可行的。
希望对有需要的人有帮助,多多交流!!!
- hibernate left join 多表连接查询不到结果,但生成的查询语句在数据库可以查询
- hibernate生成查询语句但查不到数据
- left join连接2个查询结果集的用法
- 【Access】 LEFT OUTER JOIN 关联多表的查询语句
- 两个sql查询语句之间的左连接left join
- 表的查询 left join
- MySQL多表连接查询Left Join,Right Join
- MySQL多表连接查询Left Join,Right Join
- 【转】MySQL多表连接查询Left Join,Right Join
- SQL语句-- LEFT JOIN 关联表查询
- 多表连接子查询;left join、right join、inner join的区别
- sql的 left join连接查询
- HIVE 中内连接(JOIN ON)与LEFT SEMI JOIN查询结果不一致的分析
- HIVE 中内连接(JOIN ON)与LEFT SEMI JOIN查询结果不一致的分析
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- 在webapp中判断native app是否安装并直接打开
- 数据库设计三大范式
- 标记化结构初始化语法(C语言)
- hdu 2897 邂逅明下 博弈
- Matlab基本操作函数-angle函数
- hibernate left join 多表连接查询不到结果,但生成的查询语句在数据库可以查询
- 【CQOI 2006】 简单题
- 关于java正则表达式贪婪模式和勉强模式的研究
- uboot_mt7620对SPI flash操作的分析
- Myeclipse中安装Aptana插件操作和步骤
- dowhile的妙用
- Codeforces Round #208 (Div. 2)
- PBSQLScipt 数据库管理工具V3.0
- poj——2063——Investment(dp)