単一テーブル戦略 (ディスクリミネーター付き) を使用して継承を使用します
UML スキーマ => http://yuml.me/67acf6a6
関連するすべての関連付け(車、本、テレビ)を使用して、顧客のすべての注文を取得したいと思います。モデルクラスを壊さずにこれを達成する方法を知っていますか?
@Entity
@Table(name = "customers")
public class Customer{
private Date birthDate;
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "customer", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("order")
private List<? extends Order> orders;
}
@Entity
@Table(name = "orders")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public abstract class Order{
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@NotNull
@JoinColumn(name = "CustomerID")
private Customer customer;
}
@Entity
@DiscriminatorValue("book")
public class BookOrder extends Order {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="book_id")
private Set<Book> books;
}
@Entity
@DiscriminatorValue("car")
public class CarOrder extends Order {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="car_id")
private Set<Car> cars;
}
@Entity
@DiscriminatorValue("tv")
public class TvOrder extends Order {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="tv_id")
private Set<Tv> tvs;
}
私がHQLでやっているなら
select cutomer from customer customer
inner join fetch customer.orders order
left join fetch order.cars
left join fetch order.books
left join fetch order.tvs
エラーが発生します
org.hibernate.QueryException: could not resolve property: cars,
抽象クラス Order this フィールドが存在しないことは理にかなっています。
どうすればこれを達成できるか知っていますか? この場合の休止状態の推奨事項は何ですか?
私の目標は、単純なクエリを単純化し、すべてを取得することです。