2016-06-22 35 views
0

Ich benutze Jackson zum Konvertieren eines JSON in Java-Objekte.Jackson speichern ein verschachteltes Objekt in die Datenbank

Java-Objekt:

class Person{ 
    Long id; 
    String name; 
    City city; 
} 

class City{ 
    Long id; 
    String cityName; 
} 

jcson Umwandlung:

List<Person> personList = objectMapper.readValue(json, new TypeReference<List<Person>>() { }); 

Wenn die Person zu speichern, erhalte ich folgende Fehlermeldung:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: model.City 

Können Sie bitte raten?

+0

können Sie Ihr Mapping + Ihr DAO hinzufügen? –

+0

dao: session.saveOrUpdate (Person); – user5488223

Antwort

0

Sie müssen cascade="all" (wenn Sie xml verwenden) oder cascade=CascadeType.ALL (wenn Sie Anmerkungen verwenden) für das Attribut City in Ihrer Entität Person einfügen.

Dies ist aufgrund der Tatsache, dass Sie versuchen, eine Entität zu speichern, die auf eine nicht gespeicherte verwiesen wird.

wenn Sie nicht wollen, die Stadt Datensatz löschen, wenn eine Person zu löschen Sie durch Thesen Schritte bestehen: 1- die Stadt aus der Datenbank erhalten: City city=session.get(id,City.class);

2- Einstellung Person Stadt: Person p=new person(); p.setCity(city);

3- Speichern Sie das Objekt Person.

+0

Bei Verwendung der Kaskadenlöschung löscht die Person die Stadt, was in diesem Fall nicht der Fall ist, da eine Stadt für einige Benutzer angewendet werden kann. Die Daten der Stadt sind bereits in der Datenbank gespeichert, ich muss sie nicht speichern – user5488223

+0

Ich habe meine Antwort aktualisiert –