J'utilise JPA et Hibernate, et ont une @Entity
qui comprend un @ElementCollection
d'un composant @Embeddable
, qui comporte deux volets @Embeddable
elle-même, de même type, qui ont une association avec @OneToOne
un autre @Entity
.JPA, Hibernate, intégré, et OneToOne
En gros:
@Entity
public class Company {
// ...
@ElementCollection
private List<Employee> employees;
// ...
}
@Embeddable
public class Employee {
// ...
@Embedded
private Address residentialAddress;
@Embedded
private Address postalAddress;
// ...
}
@Embeddable
public class Address {
// ...
@OneToOne
private HousingInfo housingInfo;
// ...
}
(Notez que les noms des classes ont été changés pour protéger les innocents.)
Maintenant, le problème que je vais avoir est que je suis en train d'essayer une erreur de mises à jour automatiques du schéma:
créer company_employees de table (company_id bigint non nulle, employees_collection & & element_residential_address_housing_info TINYBLOB, employees_collection & & element_postal_address_housing_info TINYBLOB)
MySQL ne clairement pas comme les &&
s. Nous utilisons une sous-classe de org.hibernate.cfg.DefaultComponentSafeNamingStrategy
, qui n'insère pas &&
partout où je peux voir.
J'ai essayé @AssociationOverride
, mais il a semblé être ignoré, quel que soit le niveau auquel je l'ai mis. C'est-à-dire, j'ai essayé de remplacer les attributs dans Company
(@AssociationOverride(name = "residentialAddress.housingInfo', joinColumns = @JoinColumn(name = "residential_housing"))
sur le List
, etc.), et l'ai également essayé dans Employee
(@AssociationOverride(name = "housingInfo", joinColumns = @JoinColumn(name = "residential_housing"))
sur residentialAddress
, etc.), mais aucun ne semblait faire quoi que ce soit, du tout.