JoinColumnでJPAを使用しているOneToManyは、データベーステーブルを自動的に生成しません.

9611 ワード

2つのエンティティOrderとCustomerがあり、1つのユーザーは複数の受注を持つことができ、1つの受注は1つのユーザーに属するため、CustomerとOrderは1対多の関係であり、OrderエンティティにはCustomerへの参照customerがあり、同時にCustomerにOrder実体の集合ordersがある.次のように書くだけです.
public class Order {
    @id
    private long id;
 
    @ManyToOne
    private Customer customer;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
 
    public Customer getCustomer() {
        return this.customer;
    }
}
 
public class Customer{
    @id
    private long id;
 
    @OneToMany
    private Set<Order> orders;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
 
    public Set<Order> getOrders() {
        return this.orders;
    }
}
システムが自動的にCustomerを生成する可能性がありますOrder関連テーブルですが、Selectorder from Order order where order.customer.id=:idは、別のテーブルを作成する必要がなく、CustomerのOrdersを見つけることができます.この自動生成されたテーブルを削除するには、次のように書きます.
public class Order {
    @id
    private long id;
 
    @ManyToOne
    @JoinColumn(name="customer", nullable=false)
    private Customer customer;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
 
    public Customer getCustomer() {
        return this.customer;
    }
}
 
public class Customer{
    @id
    private long id;
 
    @OneToMany(mappedBy="customer")
    private Set<Order> orders;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
 
    public Set<Order> getOrders() {
        return this.orders;
    }
}
mappedByとJoinColumnを1つ多く出すと、ordersはorderのcustomerマッピングによって、ordersがOrderのcustomerを介して結合されていることをJPA実装者に伝えることになります.これでCustomer_は生成されませんOrder関連テーブル