我有一個實體:JPA休眠5:OneToOne嵌套嵌入導致的元模型問題
@Entity
public class Test {
@Embedded
Content content;
// getters setters..
}
這包含嵌入類,你可以看到:
@Embeddable
public class Content {
@OneToOne
Person person;
@Embedded
Language language;
// getters setters..
}
這又包含一個嵌入式。 2次嵌套可嵌入
@Embeddable
public class Language {
String format;
@OneToOne
IdentifierCode identifierCode;
// getters setters..
}
當使用JPA的自動模式生成功能時,所有列都以正確的方式生成。
我使用每個@Entity和@Embeddable的@Data註釋生成getter,設置器,構造等。
當啓動應用程序服務器(EAP 7),我注意到在日誌這樣的警告:
HHH015011:找不到靜態元模型領域: org.package.Language_#identifierCode;這可能或可能不會指示 問題與靜態元模型
事實上,當打開元模型類Language_;沒有identifierCode列引用存在:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Language.class)
public abstract class Language_ {
public static volatile SingularAttribute<Language, String> format;
}
我不明白我在做什麼。在嵌套的@Embeddable中不能使用@OneToOne?元模型Content_正確地爲人生成單數屬性!
它使用多個嵌套embeddables時似乎出現錯誤。當只使用一種嵌入級別時,它可以工作。
我嘗試過其他的東西:
- 在類中添加Access.Field。什麼都沒發生。
- 實例化的類@Embedded,像@Embedded語言的語言=新語言()。什麼都沒發生。
- 替換爲@ManyToOne的@OneToOne。什麼都沒發生。
聽起來像您JPA提供商中的錯誤。我使用(沒有休眠)JPA提供者創建了一個'公共靜態揮發SingularAttribute <語言,mydomain.model.IdentifierCode> identifierCode;' – DN1
@ DN1您使用和哪個版本是哪一個?我想與您的供應商 –
DataNucleus JPA一起嘗試此操作。你有一個選擇就是在CLASSPATH中使用'datanucleus-jpa-query.jar'來生成靜態元模型,並將這些生成的類與現有的提供者一起使用,或者將它用於持久化。 – DN1