【问题标题】:Hibernate: Primary key made of foreign keysHibernate:由外键组成的主键
【发布时间】:2013-10-20 22:08:10
【问题描述】:

所以我有“OrderItem”类。它的主键假设由“productID”和“orderID”(来自另一个实体的 FK 引用)组成。 如何使用注释进行设置?

提前致谢!!!!

表格: ordersItems
属性: 产品ID (PK-PK) ------------------> 产品
orderID (PK-PK) ------------------> 订单

鉴于这些实体:

@Entity
@Table(name="products")
public class Product {

    @Id
    @Column(name="productID")
    private Integer id;
    private String description;
}


@Entity
@Table(name="orders")
public class Order{

    @Id
    private int orderID;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinColumn(name="orderID")
    private List<OrderItem> items;
}

@Entity
@Table(name="ordersItems")
public class OrderItem{

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn(name="productID")
    private Product product;
    private int quantity;
    private float price;
}

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    您将必须创建一个可嵌入的域类,该类仅具有由外键构建的主键中的字段。注释在类级别,@Embeddable,在外键域类上。

    这是 EmbeddedId 的文档

    http://docs.oracle.com/javaee/6/api/javax/persistence/EmbeddedId.html

    【讨论】:

    • 但是事情是这样的......我可以添加这两个属性和注释,其中一个是 Order。当我必须将它们设置为 @Id 时,麻烦就来了。我尝试使用 EmbbeddedID 创建 2 个与 FK 同名的新属性,但它没有用。正如预期的那样,休眠抛出:“实体映射中的重复列......”有什么想法吗?
    • 抱歉,直到现在才收到您的回复。你能用你尝试过的最新代码更新你的问题吗?
    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2015-03-08
    相关资源
    最近更新 更多