我有三个表结构简单:JPA /休眠:该地图很多一对多关系连接表的时候有自己的主键
pub [id, name]
days [id, name]
pub_days [id, pub_id, days_id]
出于某种邪恶的原因,有人认为,复合身份pub_days表(这将是pub_id + days_id)是不够的,并添加了自己的主键。现在我无法改变它,其他更大的系统依赖于此。 #sigh
我试图映射此标准@ManyToMany
JPA注释像这样对Hibernate(我省略的getter,setter方法,@Entitiy注释和其它杂波):
class Pub {
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "pub_days",
joinColumns = {@JoinColumn(name = "pub_id")},
inverseJoinColumns = {@JoinColumn(name = "days_id")})
@OrderBy("id")
private List<Day> pubOpeningDays;
}
class Day {
@Id Long id;
String name.
}
当我执行下面的代码:
Day day = repository.find(Day.class, id);
pub.getPubOpeningDays().add(day);
repository.persist(pub);
我得到这个错误:
ERROR: ORA-01400: cannot insert NULL into ("PUB"."pub_days"."id")
可悲的是,麦这完全有意义,因为我没有在任何地方映射该ID。事情是,我甚至不想。我希望它生成,但不知道如何解决这个问题与@ManyToMany
映射。有任何想法吗?
我想创建具有这两个类属性的POJO类的且具有可以使用任何现有的JPA策略生成它自己的PK。 – 2014-09-02 12:56:50
我需要改变我的映射吗? – Xorty 2014-09-02 12:59:51
在这两个类@ManyToMany将在那里,但与这个新的实体。更多我看到“CascaseType.ALL”应该避免。 – 2014-09-02 13:01:48