Spring Boot + Hibernate:自动生成的数据透视表上的自定义字段
Spring Boot + Hibernate: Custom fields on auto-generated pivot tables
在我的模型中:
public class House {
....
....
@OneToMany
@Nullable
private List<Person> people;
当 运行 Spring 启动应用程序时,我将看到创建了 table。一个用于 House
模型,一个用于 Person
和另一个,自动生成枢轴 table 以保留关系信息 House
和 Person
.
我的问题是:如果我想将 created_at
字段添加到数据透视表 table 的行上,那么对于 House
到 Person
的每个关联] 我可以告诉 它是什么时候创建的。
我找不到办法做到这一点。我错过了什么?
您应该为联接 table (House_Person) 创建一个额外的实体。在新实体中,您可以声明所需的其他字段,例如 created_at。最后你只需要 link 你的两个实体到新的实体 @ManyToOne:
House_Person 实体:
@Entity
@Table(name = "HOUSE_PERSON")
public class HousePerson {
...
private Person person;
private House house;
// additional fields
private Date created_at;
...
private Person person;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_ID")
public Person getPerson() {
return person;
}
private House house;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "HOUSE_ID")
public House getHouse() {
return house;
}
}
看看这里的这个例子,我希望它描述得很好:
codejava.net/hibernate-many-to-many-association-with-extra-columns-in-join-table-example
在我的模型中:
public class House {
....
....
@OneToMany
@Nullable
private List<Person> people;
当 运行 Spring 启动应用程序时,我将看到创建了 table。一个用于 House
模型,一个用于 Person
和另一个,自动生成枢轴 table 以保留关系信息 House
和 Person
.
我的问题是:如果我想将 created_at
字段添加到数据透视表 table 的行上,那么对于 House
到 Person
的每个关联] 我可以告诉 它是什么时候创建的。
我找不到办法做到这一点。我错过了什么?
您应该为联接 table (House_Person) 创建一个额外的实体。在新实体中,您可以声明所需的其他字段,例如 created_at。最后你只需要 link 你的两个实体到新的实体 @ManyToOne:
House_Person 实体:
@Entity
@Table(name = "HOUSE_PERSON")
public class HousePerson {
...
private Person person;
private House house;
// additional fields
private Date created_at;
...
private Person person;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PERSON_ID")
public Person getPerson() {
return person;
}
private House house;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "HOUSE_ID")
public House getHouse() {
return house;
}
}
看看这里的这个例子,我希望它描述得很好: codejava.net/hibernate-many-to-many-association-with-extra-columns-in-join-table-example