区分从域调用的setter和从hibernate调用的setter

时间:2014-12-02 19:18:36

标签: java hibernate jpa

我想在我的setter中做一些事情,当它从Domain类调用时,而不是从hibernate调用它时。此外,我使用Session Factory,所以我不能使用@PostLoad来标记一个标志!

任何人都对此有任何想法? 感谢。

1 个答案:

答案 0 :(得分:1)

如果您正在使用注释并注释了字段,那么Hibernate将使用反射直接访问该字段,因此在您的setter中实现自定义逻辑应该没有问题。

如果您使用XML映射,则可以指定字段访问:

第5.1.11节(https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/mapping.html

The access attribute allows you to control how Hibernate accesses the property at runtime. 
By default, Hibernate will call the property get/set pair. If you specify access="field", 
Hibernate will bypass the get/set pair and access the field directly using reflection. Y
ou can specify your own strategy for property access by naming a class that 
implements the interface org.hibernate.property.PropertyAccessor.

如果你想确定如下:

private String name;

public void setName(String name){
    if(this.name != null && ! this.name.equals(name){
        //do something
    }

    this.name = name;
}