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関連テーブル