0

假设我必须拥有实体类 Person 和 Book,它们都有一个字段名称 date(类型为 java.util.Date 的 pe),它代表 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.hibernate.MappingException: Repeated column in mapping for collection)

我试过了

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

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

4

1 回答 1

3

关联的作用不是为此类关系建模。ManyToMany 不适用于碰巧具有相同名称和值的任意列。它适用于包含每个连接实体的外键的连接表。

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

select b from Book b where b.date = :dateOfBithOfPerson
于 2013-07-05T17:14:45.037 回答