休眠,扩展实体-“ java.lang.IllegalArgumentException:未知实体”

时间:2018-12-22 11:16:17

标签: java hibernate inheritance

我有一个休眠实体new String('X', phrase.Points); ,它可以正常工作:

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

这在我的应用程序中很好用,但是当我坚持使用Entity时,Hibernate抱怨它不知道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); } } 是什么。

ExtendedEvent

我看到扩展Hibernate Entities是一个不平凡的问题,尤其是当您开始添加字段时-但我只想让Hibernate将java.lang.IllegalArgumentException: Unknown entity: my.package.ExtendedEvent 视为ExtendedEvent(因为它是) 。有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:0)

进行基本事件@MappedSuperclass并扩展类@Entity

如此

@MappedSuperclass
public class BaseEvent

@Entity
@Table(whatever)
public class ExtendedEvent extends BaseEvent

答案 1 :(得分:0)

如果仅在数据存储区中的更改更新时才想更新地图,建议您实施onFlushDirty in a Hibernate Interceptor。每当为每个实体更改将Session刷新到数据库时,都会调用此方法。您可以在onFlushDirty方法中检查您感兴趣的实体和感兴趣的属性的对象类型。