我有一个休眠实体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
(因为它是) 。有一个简单的解决方案吗?
答案 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方法中检查您感兴趣的实体和感兴趣的属性的对象类型。