gpt4 book ai didi

java - Hibernate 与接口(interface)的关联

转载 作者:行者123 更新时间:2023-11-30 08:38:19 26 4
gpt4 key购买 nike

我希望有人能帮我解决我在 hibernate 方面遇到的问题。

我正在开发一个可以为不同类型的实体开具发票的计费系统。这些实体实现了一个“Invoicable”接口(interface)。

在我的发票类中我有这一行

@ManyToOne(fetch = FetchType.EAGER)
private Invoiceable responsibleEntity;

发票接口(interface)是这样的

@MappedSuperclass
public interface Invoiceable
{
// Name to display as entity responsible
String getInvoiceOwnerName();

// Get email address to send invoice
String getInvoiceOwnerEmail();
}

运行时出现异常

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on models.Invoice.responsibleEntity references an unknown entity: interfaces.Invoiceable

我试过用谷歌搜索它并阅读了一些类似的帖子,但我什么也做不了。 hibernate 是否支持这种类型的映射?

谢谢

最佳答案

您必须以 Hibernate 方式使用继承来执行此操作。详情可参见--> Hibernate Inheritance Doc

附加信息:Hibernate 无法在没有数据库表的情况下将类型连接在一起。这对你意味着什么。 MappedSuperclasses 没有表,所以没有什么可以连接在一起的。所以这是倒闭了。最重要的是要记住。当您请求读取所有父对象时。他应该加入哪些表?这就是hibernate的继承系统发挥作用的原因。您必须将接口(interface)更改为普通类。这应该不是什么大问题。现在选择您选择的继承策略。他们每个人都有自己的优点和缺点。请阅读文档以了解哪种最适合您的情况。

以下是使用 Invoice 类的单表方法的示例。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="invoiceType",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue("Invoice")
public class Invoiceable { ... }

@Entity
@DiscriminatorValue("CustomInvoice")
public class CustomInvoice extends Invoiceable { ... }

关于java - Hibernate 与接口(interface)的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com