Md.*_*man 1 java database spring hibernate spring-data-jpa
实体类
public class Event {
@Id
private String name;
private String description;
private Date eventDateTime;
//getter and setter code
}
Run Code Online (Sandbox Code Playgroud)
服务等级
EventService {
@Autowired EventRepository eventRepository;
List<Event> getEvents () {
List<Event> events = eventRepository.findAll();
return events;
}
}
Run Code Online (Sandbox Code Playgroud)
对于示例数据集: 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') 事件 ('添加', '', '2018-01-01 00:00:10')
为了避免重复(重复)数据,我们必须确保有一个唯一的键,并且会被@Id 注释。在这个例子中,name it self 不是唯一的,这就是结果显示重复数据的原因。eventDateTime作为唯一字段是更好的选择。
public class Event {
private String name;
private String description;
@Id
private Date eventDateTime;
//getter and setter code
}
Run Code Online (Sandbox Code Playgroud)
或者,我们可以使用name和eventDateTime定义一个复合唯一键。
public class CompositeKey implements Serializable {
private String name;
private Date eventDateTime;
}
Run Code Online (Sandbox Code Playgroud)
然后,使用 @IdClass(CopositeKey.class)注释Event类,使用 @Id注释name和eventDateTime字段
@IdClass(CopositeKey.class)
public class Event {
@Id
private String name;
private String description;
@Id
private Date eventDateTime;
//getter and setter code
}
Run Code Online (Sandbox Code Playgroud)