2012-03-20 70 views
0

在JPA中,如何编写查询以加载子类。例如,我需要一个查询来加载包含CashPayment的paymentSet(如果有的话),CheckPayment(如果有的话)。JPA搜索子类

谢谢。

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 { 
}