小编典典

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

hibernate

实体类

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;
  }
}

对于示例数据集:事件(’add’,’‘,‘2018-01-01 00:00:10’)事件(’add’,’‘,‘2018-01-01
00:10:10’)事件(’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’)


阅读 703

收藏
2020-06-20

共1个答案

小编典典

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

public class Event {

    private String name;

    private String description;

    @Id
    private Date eventDateTime;

    //getter and setter code
}

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

public class CompositeKey implements Serializable {

    private String name;

    private Date eventDateTime;
}

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

 @IdClass(CopositeKey.class)
 public class Event {
        @Id
        private String name;

        private String description;

        @Id
        private Date eventDateTime;

        //getter and setter code
    }
2020-06-20