2016-06-12 55 views
0

衆所周知,Hibernate使用髒檢查 - 也就是說,在DB中,它只更改程序實體中已更改的字段。如何知道哪些字段已更改?我可以獲得舊的價值嗎?Hibernate中的髒檢查

+0

不,它不這樣做。至少不是默認的。不,它不暴露實體的舊狀態。如果你需要這樣做,你需要自己做。 –

+0

@JBNizet舊狀態可以通過事件監聽器來使用。 – Naros

回答

1

org.hibernate.event.spi中有一系列事件監聽器SPI,您可以在SessionFactory的構建過程中執行和註冊,您可以在其中獲得所詢問的狀態信息。例如:

public class MyPreUpdateEventListener implements PreUpdateEventListener { 
    @Override 
    public boolean onPreUpdate(PreUpdateEvent event) { 
    Object[] newState = event.getState(); 
    Object[] oldState = event.getOldState(); 
    /* from this point, you'd need to determine the differences yourself */ 
    } 
}