为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Data JPA查询返回重复行而不是实际数据,为什么?

Spring Data JPA查询返回重复行而不是实际数据,为什么?

茅侃侃 2022-01-19 10:28:43
实体类public class Event {    @Id    private String name;    private String description;    private Date eventDateTime;    //getter and setter code}服务等级EventService {  @Autowired EventRepository eventRepository;  List<Event> getEvents () {     List<Event> events = eventRepository.findAll();     return events;  }}对于样本数据集:Event ('add', '', '2018-01-01 00:00:10') Event ('add', '', '2018-01-01 00:10:10') Event ('delete', '', '2018-01-01 00:20:00') 事件 ('edit', '', '2018-01-01 00:30:00')JPA findAll() 查询返回重复的行:事件 ('add', '', '2018-01-01 00:00:10') 事件 ('add', '', '2018-01-01 00:00:10') 事件 ('add', '', '2018-01-01 00:00:10') 事件 ('add', '', '2018-01-01 00:00:10')
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

为了避免重复(重复)数据,我们必须确保有一个唯一的键,并且将由@Id 注释。在此示例中,将其命名为 self 不是唯一的,这就是结果显示重复数据的原因。eventDateTime作为唯一字段是更好的选择。


public class Event {


    private String name;


    private String description;


    @Id

    private Date eventDateTime;


    //getter and setter code

}

或者,我们可以使用name和eventDateTime定义一个复合唯一键。


public class CompositeKey implements Serializable { 


    private String name;


    private Date eventDateTime;

}

然后,使用 @IdClass(CopositeKey.class) 和名称和eventDateTime字段使用 @Id注释事件类


 @IdClass(CopositeKey.class)

 public class Event {

        @Id

        private String name;


        private String description;


        @Id

        private Date eventDateTime;


        //getter and setter code

    }


查看完整回答
反对 回复 2022-01-19
?
皈依舞

TA贡献1851条经验 获得超3个赞

您的name-column 是实体 ( @Id) 的标识符,但您的 sample-data 包含data两次 String。

标识符必须是唯一的,如果您手动分配它们(即不使用生成的标识符),则应用程序有责任保持它们的唯一性。

如果不是奇怪的行为可能会发生。

因此,您应该修复您的示例数据或使用另一列(带有生成的值)作为实体的标识符。


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 298 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信