2011-01-13 13 views
5

Bir varlığı devam ettirirken (güncellerken), tüm varlığı geçerek EntityManager.persist (varlık)'u arayabilirsiniz. @PreUpdate ile kesişmek mümkündür.@PreUpdate içinde EJB varlığı özellik değişiklikleri nasıl belirlenir?

'un bu interceptor yönteminde hangi özelliklerin değiştirildiğini nasıl tanımlayacağı bir tarifi var mı? Bir şekilde eski ile yeni varlığı karşılaştırıyor musunuz? Her sınıf için alanın alanını karşılaştırmak yerine genel bir yöntem uygulamak daha da iyidir.

Herhangi bir girdi için teşekkürler!

tüm Sven

+0

ilgili: http://stackoverflow.com/questions/4586221/tracking-changes-to-db-fields-while-using-orm – javadude

cevap

3

İlk güncellemediğinden() yeni nesneler (ekleme) içindir devam. Kalıcılık içeriğinde değiştirilen herhangi bir nesne otomatik olarak güncellenir.

JPA, neyin değiştiğini bilmek için herhangi bir standart yol sağlamaz. Dolayısıyla, değişiklikleri kendiniz izlemeniz veya bir JPA sağlayıcıya özel API kullanmanız gerekir.

EclipseLink'te, JPA yerine EclipseLink DescriptorEventListener preUpdate olayı kullanırsanız, değişiklikleri içeren DescriptorEvent öğesine bir ObjectChangeSet eklenir.

Dokuma kullanıyorsanız, JPA'da başka bir yöntem de nesnenizi ChangeTracker'a atamak ve _persistence_getPropertyChangeListener() öğesini getObjectChangeSet() olarak çağırmaktır.

TopLink Essentials'ı kullanıyorsanız, tanımlayıcı olaylar da geçerlidir, ancak izlemeyi değiştirmek dokunmamıştır.

+0

Hazırda bekletme gibi bir şey yapmanın bir yolu var mı? – tazmaniax

İlgili konular