Я использую единую стратегию таблицы (с дискриминатором) использовать наследованиеJPA/Hibernate ребенок запрос свойство
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,
Это имеет смысл в абстрактном классе ордена это поле оленья кожа существует.
Вы знаете, как я могу это достичь? какова рекомендация спящего режима в этом случае?
Моя цель - простой простой запрос и получение всего.
В запросе используется запятая вместо точки и не присваивается псевдоним для заказа. Это реальный HQL? Тем не менее, вы не можете получить несколько пакетов, поэтому, даже если такой запрос возможен, он, вероятно, не будет работать, если ваши коллекции не являются наборами. –
Жаль, что исправил. Я меняю с помощью наборов, но я как достигаю этого –
У вас все еще нет псевдонима. Это должно быть 'internal join fetch customer.orders заказы ...' –