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

实体类


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')


茅侃侃
浏览 299回答 2
2回答

波斯汪

为了避免重复(重复)数据,我们必须确保有一个唯一的键,并且将由@Id 注释。在此示例中,将其命名为 self 不是唯一的,这就是结果显示重复数据的原因。eventDateTime作为唯一字段是更好的选择。public class Event {&nbsp; &nbsp; private String name;&nbsp; &nbsp; private String description;&nbsp; &nbsp; @Id&nbsp; &nbsp; private Date eventDateTime;&nbsp; &nbsp; //getter and setter code}或者,我们可以使用name和eventDateTime定义一个复合唯一键。public class CompositeKey implements Serializable {&nbsp;&nbsp; &nbsp; private String name;&nbsp; &nbsp; private Date eventDateTime;}然后,使用 @IdClass(CopositeKey.class) 和名称和eventDateTime字段使用 @Id注释事件类&nbsp;@IdClass(CopositeKey.class)&nbsp;public class Event {&nbsp; &nbsp; &nbsp; &nbsp; @Id&nbsp; &nbsp; &nbsp; &nbsp; private String name;&nbsp; &nbsp; &nbsp; &nbsp; private String description;&nbsp; &nbsp; &nbsp; &nbsp; @Id&nbsp; &nbsp; &nbsp; &nbsp; private Date eventDateTime;&nbsp; &nbsp; &nbsp; &nbsp; //getter and setter code&nbsp; &nbsp; }

皈依舞

您的name-column 是实体 (&nbsp;@Id) 的标识符,但您的 sample-data 包含data两次 String。标识符必须是唯一的,如果您手动分配它们(即不使用生成的标识符),则应用程序有责任保持它们的唯一性。如果不是奇怪的行为可能会发生。因此,您应该修复您的示例数据或使用另一列(带有生成的值)作为实体的标识符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java