在非唯一字段上Hibernate ManyToMany关联

时间:2013-07-05 16:42:50

标签: java hibernate jpa many-to-many

假设我必须使用实体类Person和Book,它们都有一个字段名称日期(类型为java.util.Date的pe),它代表Person的出生日期和Books的发布日期,当然两者都不是独特。现在在Entity类Person中我想要一个Relation(ManyToMany)到Books,它返回在该人的出生日期发布的所有Books。这是可能的,如果是这样,我如何定义ManyToMany关系(和JointTable)? 请注意,该字段在两个实体中都称为日期,并不是唯一的。

我试过

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "test",
    joinColumns = @JoinColumn(name = "date", unique=false),
    inverseJoinColumns = @JoinColumn(name = "date", unique=false)
  )

但它会在开始时导致异常(org.hibernate.MappingException:集合映射中的重复列)

我试过

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "test",
    joinColumns = @JoinColumn(name = "date_person", unique=false),
    inverseJoinColumns = @JoinColumn(name = "date_book", unique=false)
  ) 

但它会导致创建一个空表。我一定错过了什么。

1 个答案:

答案 0 :(得分:3)

协会的作用不是模仿这种关系。 ManyToMany不适用于具有相同名称和值的任意列。它适用于包含每个连接实体的外键的连接表。

要获取与人的出生日期在同一日期发布的所有书籍,只需执行查询:

select b from Book b where b.date = :dateOfBithOfPerson