Hibernate 无主键,生成2个JAVA类的查询方法

主要参考以下2个资料,最后问题解决。

这里主要是,如果你的复合主键有5个字段,而你查询参数只要到其中2个字段,这时,你就查不出记录。

这时,需要把用不到的3个字段,从复合主键中移出来。

资料1:http://blog.csdn.net/vastskyjoe/article/details/3649820

我新建了一个表Account,字段:id ,name ,regDate
没主键。
当我使用Hibernate新建一个反向工程后,生成两个类Account,AccountId;
现在Account的隐射mapping只有Account.hbm.xml;故只能使用hql查询account表,但是我要按照accountid表钟的字段条件查询怎么办?
解决方案:
String hql="from Account a where a.id.id="+id+" order by a.id.regDate desc";
其中a.id.id的第一个id为Account.java中的主键名,第二个id为Account表的id字段。

资料2:http://bbs.csdn.net/topics/300160723

成功了,终于知道错误在哪里了,现在就把自己分析的原因写下来,总结一下:

因为我是用myeclipse 的hibernate自动反向功能生成的PurUser和PurUserId这两个java文件, 
数据库的PUR_USER所以字段都在PurUserId.java里,而PurUser.java这个文件,只有一个和
PurUserId.java文件匹配的字段,而在XML文件里面, 数据库PUR_USER字段全部都放到composite-id里

应该把不是关联的字段放回到composite-id标签外边,如下(红色部分,之前我只是用自动反向的功能,
没有自己手动改回去)

XML/HTML code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
< class  name = "com.teddy.ssh.dao.PurUser"  table = "PUR_USER"  schema = "WING" >
         < composite-id  name = "id"  class = "com.teddy.ssh.dao.PurUserId" >
             < key-property  name = "staffId"  type = "java.lang.String" >
                 < column  name = "STAFF_ID"  length = "20"  />
             </ key-property >
             < key-property  name = "pgid"  type = "java.lang.String" >
                 < column  name = "PGID"  length = "20"  />
             </ key-property >
         </ composite-id >
         <!-- 就是这里 -->
         < property  name = "creatby" >
           < column  name = "CREATBY" />
         </ property >
         < property  name = "creatTime" >
           < column  name = "CREAT_TIME" />
         </ property >
         < property  name = "memo" >
           < column  name = "MEMO" />
         </ property >
</ class >


还有PurUser和PurUserId这两个java文件,最后应该是这样
PurUser

Java code
?
1
2
3
4
5
private  PurUserId id;
private  String creatby;
private  Date creatTime;
private  String memo;
get/set省略


PurUserId

Java code
?
1
2
3
private  String staffId;
private  String pgid;
get/set/equals/hashCode省略


问题解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值