Spring Data JPA查询返回重复的行而不是实际数据,为什么? [英] Spring Data JPA query return repeated row instead of actual data, why?
问题描述
实体类
公共类事件{
@Id
私有字符串名称;
私有字符串描述;
私人日期eventDateTime;
//获取和设置程序代码
}
服务等级
EventService {
@Autowired EventRepository eventRepository;
List< Event> getEvents(){
List< Event> events = eventRepository.findAll();
返程事件;
}
}
对于示例数据集:
Event( '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()查询返回重复的行:
Event('add','','2018-01 -01 00:00:10')
Event('add','','2018-01-01 00:00:10')
Event('add','','2018 -01-01 00:00:10')
Event('add',``,'2018-01-01 00:00:10')
为避免重复(重复)数据,我们必须确保存在唯一的键,并且该键将由@Id注释。在此示例中,名称本身并不唯一,这就是为什么结果显示重复数据的原因。最好选择 eventDateTime 作为唯一字段。
公共类事件{
私有字符串名称;
私有字符串描述;
@Id
私人日期eventDateTime;
//获取程序和设置程序代码
}
或者,我们可以使用名称和 eventDateTime 定义一个复合唯一键。
公共类CompositeKey实现可序列化{{b
$ b私有字符串名称;
私人日期eventDateTime;
}
然后,使用@IdClass注释 Event 类( CopositeKey.class)和 name 和 eventDateTime 字段,并带有@Id
@IdClass(CopositeKey.class)
公共类事件{
@Id
私有字符串名称;
私有字符串描述;
@Id
私人日期eventDateTime;
//获取和设置代码
}
Entity class
public class Event {
@Id
private String name;
private String description;
private Date eventDateTime;
//getter and setter code
}
Service Class
EventService {
@Autowired EventRepository eventRepository;
List<Event> getEvents () {
List<Event> events = eventRepository.findAll();
return events;
}
}
For sample data set: Event ('add', '', '2018-01-01 00:00:10') Event ('add', '', '2018-01-01 00:10:10') Event ('delete', '', '2018-01-01 00:20:00') Event ('edit', '', '2018-01-01 00:30:00')
JPA findAll() query return repeated rows:
Event ('add', '', '2018-01-01 00:00:10') Event ('add', '', '2018-01-01 00:00:10') Event ('add', '', '2018-01-01 00:00:10') Event ('add', '', '2018-01-01 00:00:10')
To avoid repeated (duplicate) data, we have to ensure there is a unique key and that will be annotated by @Id. In this example, name it self is not unique, that's why the result show duplicate data. eventDateTime is better choice as unique field.
public class Event {
private String name;
private String description;
@Id
private Date eventDateTime;
//getter and setter code
}
Or, we can define a composite unique key with name and eventDateTime.
public class CompositeKey implements Serializable {
private String name;
private Date eventDateTime;
}
Then, annotated Event class with @IdClass(CopositeKey.class) and both name and eventDateTime field with @Id
@IdClass(CopositeKey.class)
public class Event {
@Id
private String name;
private String description;
@Id
private Date eventDateTime;
//getter and setter code
}
这篇关于Spring Data JPA查询返回重复的行而不是实际数据,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!