JPA @Jointable不会为id创建列

时间:2012-03-20 09:30:39

标签: jpa join jboss7.x unique-constraint

我正在使用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”来设置主要(或唯一)密钥。但我不知道该怎么做。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

映射不正确:在您的情况下,@ManyToOne表示您有一个包含许多部分的组件:

@ManyToOne
private Component component;

根据您的说明,您需要@ManyToMany关系:

@ManyToMany
private List<Component> components;