Imaginez une Employee
entité qui fait référence à un Department
utilisant un composé clé:activité à l'étranger Composite clé perdue dans la fusion() (JPA/Hibernate)
@Entity
public class Employee {
...
@ManyToOne
@JoinColumns({
@JoinColumn(name="dept_country", referencedColumnName="country"),
@JoinColumn(name="dept_id", referencedColumnName="id")
})
private Department dept;
...
Lors d'une session Stateless Bean, j'associe un employé avec un département, en définissant l'attribut approprié:
employee.setAbc(abc);
System.out.println(entityManager.contains(aDepartment))); //true
employee.setDepartment(aDepartment);
employee.setXyz(xyz);
entityManager.merge(employee);
=>Tous les attributs sont conservés correctement (mis à jour) dans la base de données, à l'exception duDépartement.
Je me demande si cela est lié à la clé composée, parce que quand je regarde le SQL Mise en veille prolongée en arrière-plan, exactement les colonnes de clé étrangère manquent.
14:46:18 INFO [STDOUT#write] Hibernate:
14:46:18 INFO [STDOUT#write] update
14:46:18 INFO [STDOUT#write] employees
14:46:18 INFO [STDOUT#write] set
14:46:18 INFO [STDOUT#write] abc=?,
14:46:18 INFO [STDOUT#write] xyz=?,
14:46:18 INFO [STDOUT#write] where
14:46:18 INFO [STDOUT#write] id=?
J'espère que je manqué quelque chose de trivial ...
Est-ce que 'Department' une collection de' Employee's? Montrez-le, s'il vous plaît. – axtavt
Non, il n'y a pas de référence dans l'autre sens. (Navigation à sens unique.) Je composais cet exemple pour présenter ma question aussi simple que possible. En réalité, en réalité, ma clé composée est composée de plusieurs colonnes. Mais j'espérais que ce n'est pas pertinent à ce stade et que j'ai fait l'erreur de junior ... Thx de toute façon! – Jan
Aussi remarquable: Dans un UnitTest il fonctionne très bien. Je n'observe le problème que dans le serveur d'applications, lorsqu'il fait partie d'un bean session sans état (JBoss6, Hibernate 3.5.0) – Jan