0
當我從Domain類調用它時,我想在setter中做一些事情,但是當它從hibernate調用時,我不想做。此外,我使用會話工廠,所以我不能使用@PostLoad觸發一個標誌!區分從域調用的setter和從休眠中調用的setter
任何機構都有什麼想法嗎? 謝謝。
當我從Domain類調用它時,我想在setter中做一些事情,但是當它從hibernate調用時,我不想做。此外,我使用會話工廠,所以我不能使用@PostLoad觸發一個標誌!區分從域調用的setter和從休眠中調用的setter
任何機構都有什麼想法嗎? 謝謝。
如果您使用註釋並註釋了字段,那麼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;
}
實際上在setter中實現業務邏輯是一種糟糕的設計實踐。儘量讓他們只做他們的工作 - 只需設定價值。你爲什麼需要這種區分? – 2014-12-02 19:27:48
,因爲在我看來,二傳手的規則是增加更多的邏輯!否則就沒有必要,我可以離開這個領域。例如一些其他領域的價值取決於這個領域,並在其變更後,我需要改變其他領域。該領域可以是私人的,沒有其他人甚至知道他們存在! – hasan 2014-12-02 19:56:51