Spring Data JPA查询返回重复的行而不是实际数据,为什么? [英] Spring Data JPA query return repeated row instead of actual data, why?

查看:425
本文介绍了Spring Data JPA查询返回重复的行而不是实际数据,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

实体类

 公共类事件{

@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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆