Java 如何用Hibernate建模婚姻实体
假设您有一个人实体,如下所示:Java 如何用Hibernate建模婚姻实体,java,spring,hibernate,Java,Spring,Hibernate,假设您有一个人实体,如下所示: @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "person_id") private long id; @Column(columnDefinition = "varchar(255)") private String name; ... } @Entity publi
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
private long id;
@Column(columnDefinition = "varchar(255)")
private String name;
...
}
@Entity
public class Marriage {
...
@ManyToMany(mappedBy = "marriages")
private Set<Person> couple; //always composed by two elements
@Temporal(TemporalType.DATE)
private Date married_from;
...
}
现在假设您想要定义一个婚姻实体,包含两个人,有开始日期、结束日期(如果仍然结婚,结束日期可能为空)和nrOfChildren
你将如何处理这个问题
一种方法是向Person实体添加以下内容:
@JoinTable(name = "Person_Marriage",
joinColumns = {
@JoinColumn(name = "person_id")},
inverseJoinColumns = {
@JoinColumn(name = "marriage_id")})
private Set<Marriage> marriages;
@JoinTable(name=“Person\u婚姻”,
joinColumns={
@JoinColumn(name=“person\u id”)},
反向连接列={
@JoinColumn(name=“marriation\u id”)}
私人婚姻;
并拥有如下婚姻实体:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
private long id;
@Column(columnDefinition = "varchar(255)")
private String name;
...
}
@Entity
public class Marriage {
...
@ManyToMany(mappedBy = "marriages")
private Set<Person> couple; //always composed by two elements
@Temporal(TemporalType.DATE)
private Date married_from;
...
}
@实体
公营婚姻{
...
@许多(mappedBy=“婚姻”)
私有集偶;//始终由两个元素组成
@时态(TemporalType.DATE)
私人约会,结婚于;
...
}
当然,上面设置的couple
始终只包含2个元素,这是一个由代码强制执行的约束
我想这样的方法可能行得通,但似乎有些草率,因为如果你明白我的意思,我还需要通过代码确保婚姻(A,B)=婚姻(B,A)
你有更好的主意吗?:) 我可能会用复合键将
婚姻的两个人显式化:
@Entity@IdClass(MarriageId.class)
公营婚姻{
@身份证人1;
@身份证人2;
}
我不确定JPA的确切语法,但你明白了 嗯,这个MarriageId.class是什么?你需要它来生成JPA中的复合键,AFAIK。