在非唯一字段上休眠ManyToMany关联



假设我必须实体类Person和Book,这两个类都有一个字段名称date(java.util.date类型的p.e.),表示Person的出生日期和Books的发布日期,当然它们都不是唯一的。现在在Entity类Person中,我想要与Books建立一个关系(ManyToMany),它返回在该人出生日期发布的所有Books。这可能吗?如果可能,我必须如何定义ManyToMany关系(和JointTable)?请注意,该字段在两个实体中都被称为日期,并且不是唯一的。

我试过

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

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

我试过

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

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

关联的作用不是为此类关系建模。ManyToMany无法处理具有相同名称和值的任意列。它使用包含每个联接实体的外键的联接表。

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

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

最新更新