hibernate 视图 复合主键的问题

zy155 2006-07-03 10:46:15
在hibernate视图中定义复合主键,出现:查询时检索到数据,但是数据没有返回到pojo的奇怪现象。

log.debug(hql); // hql="from ResPortInfor"
Query query = session.createQuery(hql);// hibernate把hql翻译成的sql,可以检索到数据
lis = query.list(); // lis.size();是正确的,但是query里的数据全部是null
ResPortInforId id = null;
for(Iterator it = lis.iterator();it.hasNext();){
ResPortInfor re = (ResPortInfor)it.next(); // re = NULL
id = new ResPortInforId();
id = re.getComId();
}



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zoom.emv.pojo">
<class name="ResPortInfor" table="Res_PortInfor">
<composite-id name="comId" class="ResPortInforId">
<key-property name="nodeId" type="integer">
<column name="NodeID" />
</key-property>
<key-property name="ifName" type="string">
<column name="IfName" />
</key-property>
<key-property name="ifAlias" type="string">
<column name="IfAlias" />
</key-property>
<key-property name="ifDescr" type="string">
<column name="ifDescr" />
</key-property>
<key-property name="ifIndex" type="integer">
<column name="ifIndex" />
</key-property>
<key-property name="ifType" type="integer">
<column name="ifType" />
</key-property>
<key-property name="ifMtu" type="integer">
<column name="ifMtu" />
</key-property>
<key-property name="ifSpeed" type="long">
<column name="ifSpeed" precision="10" scale="0" />
</key-property>
<key-property name="ifAdminStatus" type="integer">
<column name="ifAdminStatus" />
</key-property>
<key-property name="ifOperStatus" type="integer">
<column name="ifOperStatus" />
</key-property>
<key-property name="ifLastChange" type="integer">
<column name="ifLastChange" />
</key-property>
<key-property name="mibmodule" type="string">
<column name="MIBModule" length="100" />
</key-property>
<key-property name="isManaged" type="integer">
<column name="IsManaged" />
</key-property>
<key-property name="typeName" type="string">
<column name="TypeName" length="128" />
</key-property>
<key-property name="ipaddress" type="string">
<column name="IPAddress" length="45" />
</key-property>
<key-property name="netMask" type="string">
<column name="NetMask" length="15" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>


public class ResPortInfor implements Serializable {

private static final long serialVersionUID = -5339534595982677885L;

private ResPortInforId comId;


public final ResPortInforId getComId() {
return comId;
}

public void setComId(ResPortInforId comId) {
this.comId = comId;
}

}
如果我不定义复合主键,检索出来的结果是正确的,
如果表中定义复合主键,检索出来的结果是正确的,
就是定义视图中定义复合主键主键有这样的问题。
请高人指点。。。。。
...全文
769 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gary_jojo 2006-07-06
  • 打赏
  • 举报
回复
兄弟我解决啦!
不要把所有的字段当作联合主键,只要挑出能够标识记录唯一性的几个字段作为KEY-PROPERTY
其他的都当做PROPERTY就可以了,哈哈哈,你试试
gary_jojo 2006-07-06
  • 打赏
  • 举报
回复
我和楼主遇到的问题一模一样,刚发了个贴子
我也是把所有字段当作KEY-PROPERTY的,是MIDDLEGEN-HIBERNATE自动生成的HBM文件
SQL语句没问题,但LIST里全是NULL
大家帮忙啊!我被卡在这儿了.
zy155 2006-07-06
  • 打赏
  • 举报
回复
结贴
zy155 2006-07-06
  • 打赏
  • 举报
回复
呵呵,我也发现了。是不能全部定义成联合主键,但是为什么呢?我用hibernatetools生成的视图,就是这样,还是有点不明白
先结贴了。。。
raylle 2006-07-04
  • 打赏
  • 举报
回复
这么多字段作复合主键?
zy155 2006-07-04
  • 打赏
  • 举报
回复
如果我不定义复合主键,改为定义一个Id,是能得到正确结果的。
我估计错误是出现在得到数据,hibernate把数据返回到pojo的时候。
可是就是看不出是哪里错,救命啊。。。。。。。。
zy155 2006-07-04
  • 打赏
  • 举报
回复
多字段作复合主键,应该没有问题吧?我用hibernate tool 自动生成就是这样。查了有关资料,也都是把视图里的字段全部定义成复合主键的。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧