繁体   English   中英

java / hibernate-如何使用注释映射三个表/实体(休眠错误未映射到单个属性)

[英]java/hibernate - how to map three tables/entities with annotation (hibernate error not mapped to a single property)

请帮忙!!。 三张桌子

customer, order,order_details

一个客户可以有很多订单,而一个订单可以有一个客户。 一个订单可以具有多个订单详细信息,而一个订单详细信息可以具有一个订单。

跟随我的课。

OrderDetail.java

@Entity
public class OrderDetail {

    @EmbeddedId
    private OrderDetail_PK orderDetail_PK;

    private int qty;
    private double unitPrice;

    @ManyToOne
    @JoinColumn(name="orderId", referencedColumnName = "id", insertable = false, updatable = false)
    private Order order;

    @ManyToOne
    @JoinColumn(name="itemCode", referencedColumnName = "code", insertable = false, updatable = false)
    private Item item;
    ...
    ..

OrderDetail_PK.java

 @Embeddable
public class OrderDetail_PK implements Serializable{

    private String orderId;
    private String itemCode;
..
..

Order.java

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

    @EmbeddedId
    private Order_PK order_PK;

    @Id
    private String id;
    @Temporal(TemporalType.DATE)
    private Date date;

    @ManyToOne
    @JoinColumn(name="customerId", referencedColumnName = "customerId", insertable = false, updatable = false)
    private Customer customer;

    @OneToMany(mappedBy = "order", cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    private List<OrderDetail> orderDetails = new ArrayList<>();
..
..

Order_PK.java

@Embeddable
public class Order_PK implements Serializable{

    private String Id;
    private String customerId;
..
..

cusotomer.java

@Entity
public class Customer {

    @Id
    @Column(name = "customerId")
    private String id;
    private String name;
    private String address;

    @OneToMany(mappedBy = "customer", cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    private List<Order> orders = new ArrayList<>();

    @OneToMany(mappedBy = "customer", cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    private List<Payment> payments = new ArrayList<>();
..
..

我的代码有什么问题? 我需要快速帮助。

由于使用的是复合键,因此需要定义所有相关的联接列:

@Entity
public class OrderDetail {

    @ManyToOne
    @JoinColumns({
            @JoinColumn(name="orderId", referencedColumnName = "id", insertable = false, updatable = false),
            @JoinColumn(name="customerId", referencedColumnName = "id", insertable = false, updatable = false),
    })
    private Order order;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM