2012-03-20 2 views
0

В JPA, как написать запрос для загрузки дочернего класса. Например, мне нужен запрос для загрузки paymentSet, который содержит CashPayment, если таковой имеется, CheckPayment, если таковой имеется.JPA search child class

Спасибо.

class SalesOrder { 
    Set<Payment> paymentSet; 
} 
class Payment {}; 
class CashPayment extends Payment; 
class CheckPayment extends Payment; 

ответ

0

Как решить эту проблему в зависимости от того, как вы смоделировали свою базу данных. wikibooks page on JPA Inheritance хорош для просмотра доступных опций. Один из вариантов заключается в том, чтобы сохранить все Payment s в той же таблице, но предоставить @DiscriminatorValue, чтобы указать, какой конкретный класс должен быть загружен. Например:

@Entity 
@Inheritance 
@DiscriminatorColumn(name="PAYMENT_TYPE") 
@Table(name="PAYMENT") 
class Payment { 
    @Id 
    private long id; 
    //... 
} 

@Entity 
@DiscriminatorValue("CASH") 
class CashPayment extends Payment { 
} 

@Entity 
@DiscriminatorValue("CHECK") 
class CheckPayment extends Payment { 
}