【发布时间】:2018-12-22 11:16:16
【问题描述】:
我有一个 Hibernate 实体 BaseEvent,它工作正常:
import javax.persistence.*;
@Entity
@Table(name = "base_event")
@SequenceGenerator(name = "seq", allocationSize = 1, sequenceName = "seq")
public class BaseEvent
{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
@Column(name = "id")
protected Long id = null;
@Column(name = "my_field", nullable = false)
protected String myField;
public Long getId()
{
return id;
}
public void setId(final Long id)
{
this.id = id;
}
public String getMyField()
{
return myField;
}
public void setMyField(final String myField)
{
this.myField = myField;
}
}
我想确定此对象何时更改并在我的应用程序中更新一些Map。我能想到的最简单的方法是扩展 BaseEvent 并覆盖 setter:
import java.text.MessageFormat;
public class ExtendedEvent extends BaseEvent
{
@Override
public void setMyField(final String myField)
{
System.out.println(MessageFormat.format("Setting myField to {0}", myField));
super.setMyField(myField);
}
}
这在我的应用程序中运行良好,但是当我持久化实体时,Hibernate 抱怨它不知道 ExtendedEvent 是什么。
java.lang.IllegalArgumentException: Unknown entity: my.package.ExtendedEvent
我可以看到扩展 Hibernate 实体是一个非常重要的问题,尤其是当您开始添加字段时 - 但我想要的只是让 Hibernate 将 ExtendedEvent 视为 BaseEvent (因为它是)。有没有简单的解决方案?
【问题讨论】:
-
您能否通过从 BaseEvent 中删除表名来将 ExtendedEvent 定义为 Hibernate 实体。
-
@Jackson 我需要定义表名,因为它与类名不同,并且 Hibernate 没有创建数据库。
-
我可以看到扩展 Hibernate 实体是一个不平凡的问题 我会说相反 - 它是微不足道的。扩展类或嵌入字段。
标签: java hibernate inheritance