【发布时间】: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