posiadające zabudowany klasy MultiLanguageText:pole Wbudowany nie działa po uaktualnieniu do hibernacji 5.0.6.Final w Spring Boot 1.3.1.RELEASE
@Embeddable
public class MultiLanguageText {
@Field
private String textDe;
@Field
private String textFr;
@Field
private String textIt;
//...
}
a inna klasa, która używa tej klasy dwukrotnie:
@Entity(name = "T_AnotherClass")
public class AnotherClass{
@Id
@GeneratedValue
private long key;
@Embedded
private MultiLanguageText name;
@Embedded
private MultiLanguageText description;
//...
}
Pola zostały dokładnie przetłumaczone na "name_textDe", "description_textDe", "name_textFr" itd. Wiosną w wersji 1.2.7.RELEASE.
jednak przechowywać LOCALDATE użytkownika chciałem uaktualnić do hibernacji 5. I następuje proces opisany tutaj: https://github.com/spring-projects/spring-boot/issues/2763#issuecomment-154419889
Proces pracował w porządku, ale tłumaczenie wbudowanych pól zatykać pracy *. Próbowałem różnych implicit_naming_strategy i physical_naming_strategy, ale żaden z nich nie działał.
Gdybym opisywanie pola w następujący sposób to działa, ale proces ten jest nieco kłopotliwe:
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "textDe", column = @Column(name = "name_textDe", length = MultiLanguageText.MAX_TEXT_LENGTH)),
@AttributeOverride(name = "textFr", column = @Column(name = "name_textFr", length = MultiLanguageText.MAX_TEXT_LENGTH)),
@AttributeOverride(name = "textIt", column = @Column(name = "name_textIt", length = MultiLanguageText.MAX_TEXT_LENGTH)),
})
private MultiLanguageText name;
* Nie działa znaczy dostaję coś wyjątku wzdłuż linii (jak teraz pole zostaje odwzorowany bez prefiksu pola stare_pole i dlatego dziedzinie istnieją dwa razy):
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: AnotherClass column: textDe (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:764)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:782)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:778)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:804)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:539)
at org.hibernate.mapping.RootClass.validate(RootClass.java:265)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:443)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
... 48 more
Po wykonaniu tej czynności nie można używać pola @CollectionTable w dowolnym miejscu, ponieważ pola są mapowane jako parent_field_collection && element_child_field. Kolekcja && element pochodzi ze strategii nazewnictwa i powoduje błąd składni sql – aycanadal