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省略


问题解决了



你可能感兴趣的:(Hibernate 无主键,生成2个JAVA类的查询方法)