2014-12-02 47 views
0

當我從Domain類調用它時,我想在setter中做一些事情,但是當它從hibernate調用時,我不想做。此外,我使用會話工廠,所以我不能使用@PostLoad觸發一個標誌!區分從域調用的setter和從休眠中調用的setter

任何機構都有什麼想法嗎? 謝謝。

+1

實際上在setter中實現業務邏輯是一種糟糕的設計實踐。儘量讓他們只做他們的工作 - 只需設定價值。你爲什麼需要這種區分? – 2014-12-02 19:27:48

+0

,因爲在我看來,二傳手的規則是增加更多的邏輯!否則就沒有必要,我可以離開這個領域。例如一些其他領域的價值取​​決於這個領域,並在其變更後,我需要改變其他領域。該領域可以是私人的,沒有其他人甚至知道他們存在! – hasan 2014-12-02 19:56:51

回答

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; 
}