我有一个实体:
@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,setter,构造函数等。
启动应用程序服务器(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_正确地为人生成单数属性!
似乎在使用多个嵌套的嵌入式时,出现了问题。当只使用一个级别的嵌入时,它可以工作。
我尝试了其他的东西:
答案 0 :(得分:1)
这听起来像是您的JPA提供程序中的错误,您应该向他们报告。
我使用的JPA提供程序(DataNucleus)创建了一个
public static volatile SingularAttribute<Language, mydomain.model.IdentifierCode> identifierCode;
您可以选择使用CLASSPATH中的datanucleus-jpa-query.jar
生成静态元模型,并将这些生成的类与现有提供程序一起使用,或者将其用于持久性。