рассмотреть следующую Pojos:JPA/OpenJPA слияния всегда вызывает SQL UPDATE на встроенных объектах
@Embeddable
public class Info {
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
@Entity
public class Person {
@Id
private long pid;
public Person(long pid){
this.pid=pid;
}
@Embedded
private Info info = new Info();
public Info getInfo(){
return info;
}
}
и некоторый код доступа к нему
{
Person p = new Person(1);
p.getInfo().setName("Foo");
EntityManager em = ...
em.merge(p); // <-- SQL INSERT or UPDATE expected
}
следующие SQLs выполняется:
1-й запуск слияние() соответствует следующим (как ожидалось):
- ВЫБОР p.name от человека, где р = 1 p.pid
- INSERT INTO человека (PID, имя) VALUES (1, 'Foo')
2-й запуск слияния() не ниже, который является неожиданное:
- ВЫБРАТЬ p.name от человека р, где имя p.pid = 1
- UPDATE человек SET = 'Foo' WHERE PID = 1
Почему UPDATE произойдет во 2-м периоде ? хотя «Foo» по-прежнему равен «Foo» ?!
Если я не использую Info Встраиваемый, вместо того, чтобы поместить свойство «имя» в классе Person, 2-ой перспективе слияния() работает, как ожидалось: есть SELECT, но не UPDATE не выполняется