2017-06-07 6 views
0

Ich habe eine einfache AppUser Entity-Klasse und Tabelle in db APP_USERS. wenn ich ein addAppUser von DAO-Klasse zu tun, ich unten Ausnahme erhalten:Hibernate persist funktioniert nicht

HTTP-Status 500 - Request-Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.hibernate.PersistentObjectException: freistehende Einheit weitergegeben bestehen: com.spring.model.AppUser

@Override 
public void addAppUser(AppUser p) { 
    Session session = this.sessionFactory.getCurrentSession(); 
    session.persist(p); 
    logger.info("AppUser saved successfully, AppUser Details="+p); 
} 

nicht sicher, wie es zu lösen. Derselbe Code funktioniert gut, wenn das Objekt einer anderen Klasse beibehalten wird. Habe etwas recherchiert aber konnte nichts finden was helfen könnte.

+1

AppUser wurde zuvor verwaltet, und jetzt befindet sich das System in einem getrennten Status. Sie können nicht losgelöste Entitäten beibehalten, Sie müssen sie zuerst zusammenführen, damit sie vom Persistenzkontext verwaltet werden, und nur Sie können die Entität persistieren. – fg78nc

Antwort

1

Das Problem ist, dass Ihre AppUser von außen kommt, so dass es nicht von Hibernate verwaltet wird. Rufen Sie merge Ihre DAO wieder zu befestigen, dh Hibernate machen damit umgehen wieder:

session.merge(p); 

Wenn Sie noch in Ausnahmefällen laufen, können Sie versuchen, zu sehen, ob das Objekt bereits in der Sitzung ist zuerst, und update(obj) dann nennen, wenn es ist, ansonsten merge(obj) anrufen.

Zum Beispiel:

if(session.contains(obj)) session.update(obj); 
else session.merge(obj); 
+0

Versuchte Ihre Lösung. Das hat mir geholfen, das wirkliche Problem zu identifizieren, das in der Entitätsklasse war. Ich hatte @GeneratedValue (strategie = GenerationType.IDENTITY) oben auf String-Attribut. Das hat das Objekt irgendwie abgelöst – Amar

0

ich hatte Problem, weil ich den unten naiven Code hatte .. bemerkte es nicht.

Es war nicht in der Lage, die enterid, die 'String' ist automatisch zu generieren und es wurde auf Null. Das ist mir beim Debuggen aufgefallen.

Hibernate: insert into app_users (enterid, lead, enable, password, approval, role, teamname) values (null, ?, ?, ?, ?, ?, ?) 
Verwandte Themen