【问题标题】:How do i properly map 2 columns to the same entity我如何正确地将 2 列映射到同一个实体
【发布时间】:2020-04-27 15:53:27
【问题描述】:

如果我在编程或设计方面做错了,请原谅我,我刚开始学习创建 Spring Boot REST api。

对于我的数据设计,我有一个用户实体。

public class User {
   private @Id @GeneratedValue(strategy=GenerationType.AUTO) Long id;
   private String username;
   private String firstname;
   private String lastname;

   @OneToMany(mappedBy = "created_by")
   private Set<Ticket> tickets_created = new HashSet<>();

   @OneToMany(mappedBy = "modified_by")
   private Set<Ticket> tickets_modified = new HashSet<>();

   //...getters setters
}

然后对于我的其他表,假设我想存储谁创建了数据以及谁最后修改了数据。所以,假设我有一个名为“Ticket”的表。

public class Ticket {
    private @Id @GeneratedValue(strategy=GenerationType.AUTO) Long id;
    private String subject;
    private String message;
    //.... other columns

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User created_by;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User modified_by;

    //... getters setters
}

所以这将导致错误提示 Repeated column in mapping for entity...,因为我将 2 列映射到用户。我已经做了很多搜索,但我找不到他们的情况,我所读到的所有内容都是通过删除一列来解决的,因为它并不是真正需要的,或者创建一个映射其他 2 的新实体实体在一起,我不想这样做,这意味着对于我的每个表都有“created_by”和“modified_by”,我需要创建另一个表以将其映射到用户表。

【问题讨论】:

  • 您是否了解过 Spring 的审计功能:baeldung.com/database-auditing-jpa
  • 具体来说,该链接的第 4 节(Spring Data JPA)
  • @andre 谢谢,我已经尝试过使用它的示例,到目前为止,我已经创建/修改了工作日期和创建/修改的硬编码。我相信这是我需要的,现在我只需要学习实现spring security。随意发布这个作为答案。

标签: java spring hibernate spring-boot jpa


【解决方案1】:

您是否了解过 Spring 的审计功能:baeldung.com/database-auditing-jpa

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2020-06-09
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多