Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用Hibernate建模婚姻实体_Java_Spring_Hibernate - Fatal编程技术网

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。