我正在使用JPA在JBoss AS 7上使用像这样的Entity-Bean中的Bean列表:
@Entity
class section {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private List<Component> components;
// ...
创建了连接两个表的表,但它不包含Id,这导致JPA在其中一个列(SECTION_ID)上创建唯一约束。这不是我想要的,因为一个部分可以有多个组件。一个组件也可以在多个部分中使用。
我已经尝试了
@JoinTable(name="SECTION_COMPONENT",
joinColumns = {
@JoinColumn(name="section_id", unique = false)
},
inverseJoinColumns =
@JoinColumn(name="component", unique = false)
}
我猜JPA至少需要一个唯一列,所以如果没有指定其他列,它只会将其添加到最后一列。我可以添加新的列“id”来设置主要(或唯一)密钥。但我不知道该怎么做。
非常感谢您的帮助
答案 0 :(得分:2)
映射不正确:在您的情况下,@ManyToOne
表示您有一个包含许多部分的组件:
@ManyToOne
private Component component;
根据您的说明,您需要@ManyToMany
关系:
@ManyToMany
private List<Component> components;