2016-06-22 5 views
0

Я использую jackson для преобразования json в java-объекты.Jackson сохранить вложенный объект в базу данных

Java объект:

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

class City{ 
    Long id; 
    String cityName; 
} 

jcson преобразование:

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

При сохранении человека, я получаю следующее сообщение об ошибке:

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

Можете ли вы посоветовать?

+0

Вы можете добавить свое картографирование + свое dao ?? –

+0

dao: session.saveOrUpdate (лицо); – user5488223

ответ

0

Вы должны указать cascade="all" (при использовании xml) или cascade=CascadeType.ALL (при использовании аннотаций) атрибута City в объекте Person.

Это связано с тем, что вы пытаетесь сохранить объект, на который ссылается несохраненный.

если вы не хотите, чтобы удалить запись City при удалении Person вы должны пройти мимо тезисов этапов: 1- получающего города из базы данных: город City city=session.get(id,City.class);

2 Уставки человека: Person p=new person(); p.setCity(city);

3- сохранить объект Person.

+0

При использовании каскадного удаления человек удалит город, что в данном случае неверно, так как город может быть применен для нескольких пользователей. Данные города хранятся в db уже, мне не нужно его сохранять – user5488223

+0

Я обновил свой ответ –

Смежные вопросы