Hibernate 为什么我们需要JPA(ORM)中的继承?

Hibernate 为什么我们需要JPA(ORM)中的继承?,hibernate,inheritance,jpa,orm,eclipselink,Hibernate,Inheritance,Jpa,Orm,Eclipselink,在使用任何ORM框架时,我还没有使用过继承。我试图通过这篇文章来理解它,但不明白为什么以及何时需要/涉及继承 这有点棘手,而且似乎不寻常,因为关系数据库没有继承的概念 在ORM中使用继承的优点是什么?是否存在强制执行的特定情况 如果可能,请给出一个示例。为什么ORM应该具有继承性? 继承是一个面向对象的编程概念,ORM(对象关系映射)的目标是将代码中的面向对象类无缝链接到数据库中的表。因此,包含所有OOP特性(包括继承)是有意义的 什么是好例子? 不是最好的例子,但要考虑的是,你正在制作一个存储

在使用任何ORM框架时,我还没有使用过继承。我试图通过这篇文章来理解它,但不明白为什么以及何时需要/涉及继承

这有点棘手,而且似乎不寻常,因为关系数据库没有继承的概念

在ORM中使用继承的优点是什么?是否存在强制执行的特定情况


如果可能,请给出一个示例。

为什么ORM应该具有继承性? 继承是一个面向对象的编程概念,ORM(对象关系映射)的目标是将代码中的面向对象类无缝链接到数据库中的表。因此,包含所有OOP特性(包括继承)是有意义的

什么是好例子?
不是最好的例子,但要考虑的是,你正在制作一个存储各种植物或动物的信息的应用程序。您希望将它们分类为一个层次结构:水生动物、鸟类、哺乳动物、鸟类等。继承可以让您非常轻松地运行“选择所有哺乳动物”或“选择所有鸟类”之类的查询。

例如,
PurchaseInvoice
SalesInvoice
,其他都是
Invoice
的子类。在
StockMovement
中,您可以拥有一个引用任何
发票的属性

public class StockMovement {

    @ManyToOne
    public Invoice invoice;

}
这是从面向对象的角度来看的。您可以轻松检索
发票中共享的常用信息,例如:

for (StockMovement stockMovement: allResult) {
    stockMovement.invoice.number;
    stockMovement.invoice.date;
}
@Entity
public class StockMovement {

     @Embedded public InvoiceId invoiceId;

}

@Embeddable
public class InvoiceId {

     public String invoiceId;

     public int invoiceType;
}
继承是优雅的,但不是必需的。如果您不想使用继承,或者如果您的JPA提供者遇到一些限制,您可以将发票的id存储在
StockMovement
中。例如:

for (StockMovement stockMovement: allResult) {
    stockMovement.invoice.number;
    stockMovement.invoice.date;
}
@Entity
public class StockMovement {

     @Embedded public InvoiceId invoiceId;

}

@Embeddable
public class InvoiceId {

     public String invoiceId;

     public int invoiceType;
}
要检索数据,必须手动执行查询:

for (StockMovement stockMovement: allResult) {
    if (stockMovement.invoice.invoiceType == 0) {
        execute query "FROM PurchaseInvoice p WHERE p.id = " + stockMovement.invoice.invoiceId);
    }
    if (stockMovement.invoice.invoiceType == 1) {
        execute query "FROM SalesInvoice p WHERE p.id = " + stockMovement.invoice.invoiceId);
    }
}

如果你使用继承,你可以避免这种讨厌的
如果

你知道一些用简单易懂的例子说明继承目的的链接吗?我还不明白。你知道一些用简单易懂的例子说明继承目的的链接吗?我还不明白。如果由于对象模型的原因,需要在类中使用继承,可以在类中使用继承。您在JPA中使用什么取决于您的类,所以如果您的类具有继承性,那么您可以在JPA中这样做。除了您的对象模型拥有继承之外,您不会出于任何其他原因“在JPA中使用继承”