【发布时间】:2011-02-24 20:03:54
【问题描述】:
我有几个实体类。现在我想在每个实体中使用@PostLoad。每个实体的功能代码都是相同的。所以我创建了一个包含@PostLoad 方法的超类(公共抽象类AbstractModel {..})。现在有可能做到这一点吗?在快速测试中,该方法未执行,但该方法在实体中执行...也许有人对此有解决方法?
@MappedSuperclass
public class Parent implements Serializable
{
@PostLoad
public void postLoad()
{
System.out.println("postLoad called!");
}
}
我的继承自 Parent 的实体类:
@Entity
@Table(name = "albums") //de naam van de tabel wordt 'albums'
public class Album extends Parent implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id") //de naam van de kolom wordt 'id'
private Long id;
...
}
以及运行时的错误:
异常 [EclipseLink-30005] (Eclipse 持久性服务 - 2.0.2.v20100323-r6872):org.eclipse.persistence.exceptions.PersistenceUnitLoadingException 异常描述:异常 在搜索时被抛出 使用 ClassLoader 的持久性归档: sun.misc.Launcher$AppClassLoader@11b86e7
内部异常: javax.persistence.PersistenceException: 异常 [EclipseLink-28018] (Eclipse 持久性服务 - 2.0.2.v20100323-r6872):org.eclipse.persistence.exceptions.EntityManagerSetupException
异常描述:预部署 PersistenceUnit [JPA_TestPU] 失败的。
内部异常:异常 [EclipseLink-7161](日食 持久性服务 - 2.0.2.v20100323-r6872):org.eclipse.persistence.exceptions.ValidationException 异常描述:实体类 [class jpatest.Album] 没有主 键指定。它应该定义 @Id、@EmbeddedId 或 @IdClass。如果 您已经使用这些中的任何一个定义了 PK 注释然后确保你这样做 没有混合访问类型(两者 字段和属性注释)在 您的实体类层次结构。
【问题讨论】:
-
为了安全起见,您已经注释了抽象父类@Entity 或@MappedSuperclass?
-
如果你发布你的代码,这会容易得多
-
现在我将它标记为@MappedSuperclass 但现在它抱怨它们在子类中没有主键(子类是实体,超类是映射超类)。在子类中,它们是主键。
-
@Stijn 请,请,请发布代码? (我为什么要乞求这个?)
-
我贴出来了 :) 你能弄清楚吗?