Sto tentando di mappare un oggetto @Embeddable in una sottoclasse la cui classe padre ha già un campo di quel tipo @Embeddable.Hibernate mappatura di un secondo campo @Embeddable in una sottoclasse
La sospensione Embeddable Objects documentation rivendicazioni posso utilizzare la @AttributeOverrides per sostituire i nomi delle colonne di un oggetto @Embeddable:
esempio
@Entity
public class Person implements Serializable {
// Persistent component using defaults
Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="iso2", column = @Column(name="bornIso2")),
@AttributeOverride(name="name", column = @Column(name="bornCountryName"))
})
Country bornIn;
...
}
Qui è il caso che ho:
@Embeddable
public class ContentID implements Serializable {
@Column(name="contentID")
private String contentPath;
}
@MappedSuperclass
public abstract class BaseDomainObject implements Serializable {
@Embedded
private ContentID contentID;
}
public class Achievement extends BaseDomainObject {
@Embedded
@AttributeOverrides({
@AttributeOverride(name="contentID", column = @Column(name="awardedItem")),
})
private ContentID awardedItem;
}
L'errore che ottengo è:
org.hibernate.MappingException: colonna ripetuta nella mappatura per l'entità: Achievement colonna: contentID (dovrebbe essere essere mappato con insert = "false" update = "false") a org.hibernate.mapping.PersistentC lass.checkColumnDuplication (PersistentClass.java:652) a org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:674) a org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:670) a org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:696) a org.hibernate.mapping.PersistentClass.validate (PersistentClass.java:450) a org.hibernate.mapping.SingleTableSubclass.validate (SingleTableSubclass .java: 43) a org.hibernate.cfg.Configuration.validate (Configuration.java:1108) a org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1293) a org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory (AnnotationConfiguration.java:867)
UPDATE:
Ho cercato i problemi di Hibernate relativi a questo e il progetto GRAILS ha affermato che hanno risolto il problema, ma la loro soluzione di annotazione non sembra essere un'annotazione javax.persistence valida (forse è una nuova versione).
curiosità: Perché si incorpora paese invece di utilizzare un rapporto? –