2013-10-21 25 views
0

如上所述 - 如果持续调用失败,我们修改了模型,这意味着我们正在使用(现在已修改,但由于异常而未实际持久保存)模型。如果这是在一个服务层而不是一个EntityListener中,我们实际上可以在任何在该特定类的异常处理中调用DAO之前改变我们改变的任何属性。Hibernate EntityListeners - 在persist调用之前修改模型的PrePersist方法 - 如果持续调用失败会怎么样?

由于这个原因 - 对所描述模型的改变最好限制为'Service'图层对象,而不是'听众'(它应该只用于我们想要保留的额外信息,而不是实际模型我们将来会使用的数据)?

回答

2

问题不在于修改模型,而是修改的语义。 在这个例子中,你可以从Hibernate文档中看到@PrePersist的一个很好的用法,在持久化之前从模型中改变lastUpdate日期。此方法仅修改可以被定义为元数据的内容。

public class LastUpdateListener { 
    /** 
    * automatic property set before any database persistence 
    */ 
    @PreUpdate 
    @PrePersist 
    public void setLastUpdate(Cat o) { 
     o.setLastUpdate(new Date()); 
    } 
} 

如果你想要的是修改业务模型的数据服务层的,你需要把代码,因为它是其他地方的人希望它是(http://en.wikipedia.org/wiki/Principle_of_least_astonishment)。

相关问题