2011-03-08 3 views
1

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.

Répondre

0

Apparemment, @AttributeOverride a fonctionné, même si, à partir de la documentation, il semblait que je devais utiliser @AssociationOverride.