gpt4 book ai didi

java - JPA @OneToMany 具有复合 PK - PK/FK 重叠

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:39 27 4
gpt4 key购买 nike

我需要使用 JPA 处理现有数据库表。这些表使用复合主键。外键属性与表的主键重叠。

简化示例,每个“订单”都有许多“OrderItems”

Table Order                   Table OrderItem
------------------- ----------------------
businessDomain (PK) businessDomain (PK/FK)
orderId (PK) oItemId (PK)
field1 orderId (FK)
field2 ... description ...

我创建了以下实体和 ID 类:

// ============== Order Entity ====================== 
@Entity
@IdClass(OrderId.class)
public class Order implements Serializable {

@Id
private long busindessDomain;

@Id
private long orderId;

private String field1;
private String field2;

//Getters/Setters
}

// ============== OrderItem Entity ==================
@Entity
@IdClass(OrderItemId.class)
public class OrderItem implements Serializable {

@Id
private long busindessDomain;

@Id
private long oItemId;

private String description;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="orderId", referencedColumnName="orderId", insertable=false, updatable=false)
private Order order;
//Getters/Setters
}

// ============== OrderId class =====================
public class OrderId implements Serializable {

private long busindessDomain;
private long orderId;

//Getters/Setters
}

// ============== OrderItemId class =================
public class OrderId implements Serializable {

private long busindessDomain;
private long oItemId;

//Getters/Setters
}

但这不起作用。那么我需要做什么才能获得从 orderItem 到 order 的重叠键和复合键的正确映射?

感谢您的帮助。丹尼尔<小时/>

编辑:

好吧,这是另一个似乎有效的尝试。需要进一步测试。

// ============== Order Entity ====================== 
@Entity
@IdClass(OrderId.class)
public class Order implements Serializable {

@Id
private long busindessDomain;

@Id
private long orderId;

private String field1;
private String field2;

@OneToMany(targetEntity=OrderItem.class, mappedBy="order")
private List<OrderItem> orderItems;

//Getters/Setters
}

// ============== OrderItem Entity ==================
@Entity
@IdClass(OrderItemId.class)
public class OrderItem implements Serializable {

@Id
private long busindessDomain;

@Id
private long oItemId;

private String description;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="businessDomain", referencedColumnName="businessDomain"),
@JoinColumn(name="orderId", referencedColumnName="orderId")
})
private Order order;

//Getters/Setters
}

最佳答案

您的 foiegn key 只是 busindessDomain 而不是 OrderId。你能试试这个吗?

@Entity    
public class Order {



@EmbeddedId
private OrderPk orderId;

//getter/setter...

@Embeddable
private static class OrderPk {
private long busindessDomain;
private long oItemId;
}
}

订单项目:

@Entity    
public class OrderItem{



@EmbeddedId
private OrderItemPk orderTemId;

@ManyToOne
@JoinColumns(value = { @JoinColumn(referencedColumnName = "businessDomain", name="businessDomain")})
private Order order;


getter/setter...

@Embeddable
private static class OrderItemPk{
private long busindessDomain;
private long oItemId;
}
}

关于java - JPA @OneToMany 具有复合 PK - PK/FK 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com