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

标签 java hibernate jpa

当从域类调用它时,我想在我的 setter 中执行一些操作,而不是从 hibernate 中调用它时。此外,我正在使用 session 工厂,因此我无法使用 @PostLoad 来触发标志!

有人对此有任何想法吗? 谢谢。

最佳答案

如果您使用注释并注释了字段,那么 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;
}

关于java - 区分从域调用的 setter 和从 hibernate 调用的 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257207/

相关文章:

hibernate - JPA(Hibernate)SINGLE_TABLE继承包罗万象的鉴别器值?

java - 如何在 SQL 中使用可选 WHERE 子句?

java - 以编程方式管理 LinearLayout

java - 通过 InjectMocks Spy 注入(inject)对象

java - 枚举和枚举的区别

java - 在 JPA 中插入多行的最有效方法

java - 我们如何在 weblogic 服务器中获取历史线程转储

java - 从 C3P0 连接池获取 DataSource/Connection

java - Spring Boot ManyToMany 保留嵌套数据

java - EntityManager.unwrap() 抛出 java.lang.AbstractMethodError