Использование JPA2 и Hibernate
У меня есть два класса, которые взаимосвязаны в исходных данных,
Класс человека:
@Entity
public class Person {
@Id @Column("PERSON_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String job;
// getters & setters
}
И класс Кино:
@Entity
public class Movie {
@Id @Column("MOVIE_ID")
private long id;
private String movieName;
private String rating;
@ManyToMany
@JoinTable(name = "Movie_Actor",
joinColumns = @JoinColumn(name="Movie_ID"),
inverseJoinColumns = @JoinColumn(name="Person_ID")
)
private Set<Person> actors = new HashSet<Person>();
// getters & setters
}
Актер - это экземпляр Person
с заданием = "Актер".
Я планирую добавить авторов, режиссеров и т. Д. Позже, когда это сработает. Первоначально объект Actor может иметь или не иметь идентификатор (при условии, что в дальнейшем мы будем читать из базы данных и заполнить PERSON_ID
).
Актеры добавлены в класс Movie
:
Person actor = new Person();
actor.setId=0;
actor.setName="Actor Name";
actor.setJob="Actor";
movie.addActor(actor);
From Movie.java
public void addActor(Person actor) {
actors.add(actor);
}
В настоящее время у меня работает код, который будет вставлять объекты Person (актеры) и Movie в базу данных (при условии, что они в данный момент не существуют).
Я хотел бы обновить объект Person
после обогащения его данными из других источников (например, цитаты / рисунки), сохранить его в базе данных session.save(actor)
(который создает PERSON_ID
, а затем сохранить Movie
объект.
Проблема в том, что когда я обновляю объект Movie
обновленным Person
(включая идентификатор), тогда я получаю уникальную ошибку ограничения для базы данных (поскольку Person
уже существует).
Как сохранить объект Movie
с этими предварительно созданными Person
объектами, которые могут иметь или не иметь отношения?
<ч />
РЕДАКТИРОВАТЬ: Согласно предложению Томаса, я изменил session.save на session.saveOrUpdate, что решает проблему уникальной константы.