在JPA中,如何编写查询以加载子类。例如,我需要一个查询来加载包含CashPayment的paymentSet(如果有的话),CheckPayment(如果有的话)。JPA搜索子类
谢谢。
class SalesOrder {
Set<Payment> paymentSet;
}
class Payment {};
class CashPayment extends Payment;
class CheckPayment extends Payment;
在JPA中,如何编写查询以加载子类。例如,我需要一个查询来加载包含CashPayment的paymentSet(如果有的话),CheckPayment(如果有的话)。JPA搜索子类
谢谢。
class SalesOrder {
Set<Payment> paymentSet;
}
class Payment {};
class CashPayment extends Payment;
class CheckPayment extends Payment;
你如何解决这个问题取决于你如何建模你的数据库。 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 {
}
您需要映射继承关系。我参考了文档:http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/。您也可以浏览与“jpa继承”相关的stackoverflow问题。