hibernate 查询view值覆盖,生成重复数据

问题背景:

两个表A,B,B是detail表,A一对多B,使用A的id关联,为了方便查询detail数据。

正常情况:多条A数据相同但不同B数据不同。

异常情况:多条数据,A数据相同,B数据也相同。

问题分析:

id设置成了不唯一字段,而Hibernate认为它是唯一的,导致了查询出的两条数据有相同的B字段的值时,Hibernate直接复用了第一条查出的数据,因为它认为第二条既然主键都相同了,那其它的也一定一样。

解决办法:

1.把view中唯一的一个字段设置为id,加上@Id注解

注意该唯一值不能为空,如果存在为空的数据,将会导致该行数据都为空。

(Hibernate 映射视图会生成联合主键.在查询时,如果联合主键(其实不光是联合主键,单个的主键也是,如果为空,那么返回的整条结果都为空)里有一项值为null,则整个结果返回null)

2.给view添加一个唯一属性,如uuid。

create view vw_a_b as select (select uuid()) AS `uuid`, A,B from A left join B on A.id=B.A_ID;

参考:http://www.th7.cn/Program/java/201512/728568.shtml 

最新回复(0)
/jishuxp5QmXDqUqssOiFlXCuDGyz3eDcPKsP1lzuoG3j9NaA_3D4858517
8 简首页