解决方法:hql查询无主键表中的数据,返回的结果全是一样的!

在oracle中定义了表titlerecord,其中没有主键,测试数据两条:

001 房门管理学院博士教授2011-04-12 2011-04-15
001 房门 管理学院 博士 讲师 2009-02-14 2009-02-20

在daoImpl层写查询hql语句

String hql = "from TitleRecord t where t.personNum = ?"; Query query = session.createQuery(hql); query.setString(0, personNum);查询出来的结果为:

001 房门管理学院博士教授2011-04-12 2011-04-15

001 房门管理学院博士教授2011-04-12 2011-04-15

记录的数目是对的,但是查出来的结果都是一样的。

解决办法:

在映射文件.hbm.xml中定义为联合主键,即用<composite-id>

<composite-id> <key-property name="personNum" type="java.lang.String"> <column name="PERSONNUM" /> </key-property> <key-property name="personName" type="java.lang.String"> <column name="PERSONNAME" /> </key-property> <key-property name="workDepart" type="java.lang.String"> <column name="WORKDEPART" /> </key-property> <key-property name="education" type="java.lang.String"> <column name="EDUCATION" /> </key-property> <key-property name="title" type="java.lang.String"> <column name="TITLE" /> </key-property> <key-property name="titleAccessTime" type="java.util.Date"> <column name="TITLEACCESSTIME" length="7" /> </key-property> <key-property name="titleAccessNum" type="java.lang.String"> <column name="TITLEACCESSNUM" /> </key-property> <key-property name="effectTime" type="java.util.Date"> <column name="EFFECTTIME" length="7" /> </key-property> </composite-id>重新部署,但是报错:composite-id class must implement Serializable

使用联合主键时,bean类必须序列化

import java.io.Serializable;

public classBean implements Serializable {}

最终查询结果正确


至于为什么要使用联合主键,可能是hibernate内部的机制,我也不太清楚,还请大家不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值