jpa无主键表查询结果重复(复合主键的使用)

jpa要求数据表映射的实体类必须有id,但是实际的表中往往是没有主键的,如果在实体中随便给某个属性添加@id注解,那么在使用查询时得到的结果往往是相同的,比如下面的例子:

数据表:表中videoID不是主键(在其他表中它是主键)
在这里插入图片描述

表映射的实体:因为实体必须要有@id,所以我把注解添加到videoID
在这里插入图片描述
使用jpa 提供的方法查询所有数据
在这里插入图片描述

查询结果:videoID相同的查询结果都相同,也就是所有结果中查找到的都是相同videoID的那些数据的第一行,看我的表查找到的全都是第一集
在这里插入图片描述

解决方案:使用复合主键

观察我上面的表,videoID虽然不是这个表的主键,但是加上sortID后,它们两个可以组合成主键(视频的id加上视频的某一集可以成为唯一识别标识)

1、另外创建一个实体:需要实现序列化,不用添加任何注解,属性就是组合在一起能成为的唯一标识的字段,也不用写set方法和get方法,这个实体的意思就是它整个就是一个id(属性名和表的字段名相同)
在这里插入图片描述
2、给表映射的实体添加注解,给表添加@IdClass,给那两个属性添加@Id
在这里插入图片描述

再次看查询结果:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值