@PrePersist在JPA中使用hibernate提供程序进行实体继承

时间:2015-11-13 10:35:53

标签: hibernate jpa

@Entity
@Inheritance(strategy = InheritanceType.Joined)
public class SiteMessage implements Identifiable{
    private String uid;
    @PrePersist
    public void onCreate(){
        uid = "12344"; // Actually we generates new value here
        System.out.println("Executed onCreate1");
    }
}

@Entity
@Table(name = "feedback")
public class Feedback extends SiteMessage {
    @PrePersist
    @Override
    public void onCreate(){
        super.onCreate();
        System.out.println("Executed onCreate2");
    }
}

当我保存SiteMessage实体时,我看到:执行onCreate1。当我尝试保存Feedback实体时,反馈或SiteMessage的onCreate()方法没有被执行。

如果我将Base类的实例存储/持久化到数据库,一切正常。日期正在更新。但是现在,如果我想要持久保存子实例,则数据库会抛出以下异常:

org.hibernate.exception.ConstraintViolationException:Column' uid'不能为空

所以,在我看来,这是因为在Child中方法" @PrePersist protected void updateDates()"在将实例持久保存到数据库之前不会调用/调用。

感谢任何帮助。提前谢谢。

0 个答案:

没有答案