当前位置: 首页 > 面试题库 >

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

白晋鹏
2023-03-14
问题内容

实体类

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


问题答案:

为了避免重复(重复)数据,我们必须确保有一个唯一的键,并且该键将由@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
    }


 类似资料:
  • 这是一个Springboot项目。代码片段如下所示。在第59行,显示是

  • 我想从一个MariaDB数据库获取数据,并通过Maven安装了MariaDB JDBC连接器。下面的代码将数据的参数而不是实际的行/单元格数据添加到组合框中(请参见代码段,第10行)。这就是我要解决的问题。如果重要的话,我的表由1个int和4个varchar组成。 代码段(带行计数):

  • 我知道有很多与此相关的问题,但我似乎找不到一个能帮助我解决问题的答案。 我正在使用os.walk()循环浏览主文件夹中的子文件夹,其中包含文件夹和文件。 因此,我使用这段代码根据子文件夹名称创建一个新的文本文件。但是,这将返回folder/.txt,这意味着dirs将返回“/”,而files将返回['file.txt','file2.txt']。 如何修复它,使dirs返回['主文件夹/传递文件夹

  • 问题内容: 快速版本 基本上,我正在更新hibernate表,后续查询正在加载陈旧的值。 详细版本 hibernate(3.3.1.GA)和EhCache(2.4.2)。 包含页面的持久对象,我将页面添加到本书的中间。我正在使用Databinder / Wicket,尽管我认为这并不相关。 适用的字段/方法是: 最终结果是,有一个新页面添加到列表中,并且数据库也进行了相应更新,我已经在我的数据存储

  • 在Java 8中,我越来越多地用替换返回值。 所以我曾经有: 我现在使用: 我对此的论点是: 它强制执行基础列表的不变性。 它隐藏了存在基础列表的事实。之后可以将其更改为集合或其他结构,而无需更改方法签名 它很好地封装了该方法的用户希望对项进行处理,而不是对列表进行处理 如果需要,它可以在以后进行简单的并行化 事实上,现在,在我的代码中,返回<code>列表 显然,其中一些可以通过不可变集合来实现