2014-12-03 15 views
7

Kann ich nur mit JPA irgendwie verfolgen einen ganzen Entity-Graphs Zustand?JPA Change Event auf Entity Graph [EclipseLink]

Betrachten Sie eine Hierarchie mit zwei oder drei Klassen in ihnen mit mindestens einer Sammlung.

Mit JPA @Post ... Anmerkungen Ich kann nur die tatsächliche Entität verfolgen und nicht ihre untergeordneten Elemente und/oder Auflistungen, da es sich nur um das Datenbankereignis handelt.

Ich weiß, Hibernate kann das tun, aber ich möchte nicht auf die Implementierung der JPA für das tun.

Ich wäre ziemlich glücklich, wenn es eine Möglichkeit gäbe, dies zumindest mit EclipseLink zu tun.

Antwort

7

nicht sicher, ob dies ist, was Sie suchen, aber Sie können wie so ändern auf Ihre Entitäten erkennen:

Account a = em.merge(account); 
final JpaEntityManager jpaEntityManager = (JpaEntityManager) em.getDelegate(); 
final UnitOfWorkChangeSet changeSet = jpaEntityManager.getUnitOfWork().getCurrentChanges(); 
final ObjectChangeSet accountChangeSet = changeSet.getObjectChangeSetForClone(a); 
final ObjectChangeSet userChangeSet = changeSet.getObjectChangeSetForClone(a.getUser()); 
em.clear(); 
//checks only for these 2 specific fields; changeSet.hasChanges() would check for all changes 
return accountChangeSet.hasChangeFor("credits") || userChangeSet.hasChangeFor("name"); 

Hope this etwas hilft.

+0

danke für die Antwort, aber nein. Ich habe bereits einen Weg gefunden, dies in EclipseLink zu tun, da EclipseLink die @PostUpdate/... etc. Methoden wirklich gut verarbeitet (Updates für Collections werden an die Eigentümer-Entity gesendet usw.), was andere JPAs leider nicht tun. Ich denke, dass ich für jeden Anbieter, den ich in meiner API unterstützen möchte, bei einer benutzerdefinierten Implementierung bleiben muss. –

+0

https://github.com/Hotware/Hibernate-Search-JPA/blob/master/hibernate-search-jpa/src/main/java/com/github/hotware/hsearch/jpa/event/HSearchJPAEventListener.java –

+0

akzeptiert das, seit ich einen Weg dazu in EclipseLink gefragt habe, würde ausreichen. Es tut irgendwie nicht, aber ich bin ein Mann meines Wortes. –

Verwandte Themen