使用hibernate注释映射ManyToMany关系?

时间:2010-07-09 18:59:48

标签: java hibernate orm annotations many-to-many

表格布局:

TABLE ORDER:
id 
localizedInfoId

Table OrderLocalizedInfo:
id
localizedInfoId
name

使用以下实体:



public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
   private Long id;

    @ManyToMany(
        targetEntity=OrderLocalizedInfo.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(
        name="OrderLocalizedInfo",
        joinColumns=@JoinColumn(name="localizedInfoId"),
        inverseJoinColumns=@JoinColumn(name="localizedInfoId"))
   private List localizedInfos;
}

public class OrderLocalizedInfo {

   @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
   private Long id;

    @Column(name="localizedInfoId")
   private Long localizedInfoId;

    @Column(name="name")
   private String name;
}

我想映射上面的情况,以便在订单对象上使用每个表中的“localizedInfoId”字段列出OrderLocalizedInfo对象。 当我这样做时,我得到一个映射异常'重复列映射集合Order.localizedInfos列:localizedInfoId。

2 个答案:

答案 0 :(得分:6)

我并不真正理解你的物理模型,但它显然不代表多对多的关联。 A和B之间的多对多关联涉及一个连接表,其中包含源表和目标表的主键列:

+-------+    +-------+    +-------+
|   A   |    |  A_B  |    |   B   |
+-------+    +-------+    +-------+
| A_ID  |    | AID   |    | B_ID  |
| ...   |    | BID   |    | ...   |
+-------+    +-------+    +-------+

目前,没有任何内容可以与@ManyToMany进行映射。你需要修复你的物理模型或澄清你想要实现的目标(也许它毕竟不是很多)。

答案 1 :(得分:0)

正如Pascal所说,如图所示,不存在ManyToMany关系。您当前的模型建议OrderLocalizedInfo对象的列表将在Hibernate中更好地表示为OneToMany集合 - http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html

相关问题