在连接表JPA 2中映射额外属性

时间:2012-03-22 05:28:29

标签: jpa-2.0

我正试图在此链接http://www.javaworld.com/javaworld/jw-01-2008/images/datamodel.gif

之后对此关系进行建模

它是Order和Products之间通常的多对多关系,但我不知道如何在Join表中添加额外的列。

@Entity
@Table(name = "Orders")
public class Order {
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "ORDER_LINES", joinColumns = { @JoinColumn(name = "ORDER_ID") }, inverseJoinColumns = { @JoinColumn(name = "PROD_ID") })
    private Set<Product> products;
}

@Entity
@Table(name="PRODUCTS")
public class Product {
    @ManyToMany(mappedBy="products")
    private Set<Order> orders;
}

如何在JPA 2.0中添加Join Table extra属性?

由于

1 个答案:

答案 0 :(得分:22)

在JPA(2.0)中没有关于具有额外持久属性的概念。这就是为什么与财产的关系实际上是中间实体。

从订单和产品实体,您需要与新实体的一对多关系。由于双向关系,新实体将与订单和产品具有多对一关系。

你需要去做这样的事情(仅显示关系,id和其他映射被剥离):

@Entity
@Table(name="order_item")
public class OrderItem {
    @ManyToOne
    private Order order;
    @ManyToOne
    private Product product;
}

@Entity
public class Order {
    @OneToMany (mappedBy = "order")
    private Set<OrderItem> orderItems;
}

@Entity
public class Product {
    @OneToMany(mappedBy = "product")
    private Set<OrderItem> orderItems;
}