主要参考以下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标签外边,如下(红色部分,之前我只是用自动反向的功能,
没有自己手动改回去)
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
>
|
1
2
3
4
5
|
private
PurUserId id;
private
String creatby;
private
Date creatTime;
private
String memo;
get/set省略
|
1
2
3
|
private
String staffId;
private
String pgid;
get/set/equals/hashCode省略
|