JPA Hibernate 5:嵌套 Embeddable 中的 OneToOne 导致元模型问题
JPA Hibernate 5: OneToOne in nested Embeddable causes metamodel issue
我有一个实体:
@Entity
public class Test {
@Embedded
Content content;
// getters setters..
}
如您所见,这包含一个嵌入式 class:
@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: Unable to locate static metamodel field :
org.package.Language_#identifierCode; this may or may not indicate a
problem with the static metamodel
的确,当打开元模型时class 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_ 正确地为 person 生成了单数属性!
似乎在使用多个嵌套的可嵌入对象时出了点问题。当只使用一层嵌入时,它是有效的。
我尝试了其他东西:
- 在 class 上添加 Access.Field。没有任何反应。
- 实例化@Embedded class,比如@Embedded Language language = new Language()。没有任何反应。
- 用@ManyToOne 替换了@OneToOne。没有任何反应。
这听起来像是您的 JPA 提供程序中的错误,您应该向他们报告。
我使用的 JPA 提供程序 (DataNucleus) 创建了一个
public static volatile SingularAttribute<Language, mydomain.model.IdentifierCode> identifierCode;
您的一个选择是只使用 CLASSPATH 中的 datanucleus-jpa-query.jar
来生成静态元模型,并将生成的 类 与您现有的提供程序一起使用,或者也将其用于持久性。
我有一个实体:
@Entity
public class Test {
@Embedded
Content content;
// getters setters..
}
如您所见,这包含一个嵌入式 class:
@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: Unable to locate static metamodel field : org.package.Language_#identifierCode; this may or may not indicate a problem with the static metamodel
的确,当打开元模型时class 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_ 正确地为 person 生成了单数属性!
似乎在使用多个嵌套的可嵌入对象时出了点问题。当只使用一层嵌入时,它是有效的。
我尝试了其他东西:
- 在 class 上添加 Access.Field。没有任何反应。
- 实例化@Embedded class,比如@Embedded Language language = new Language()。没有任何反应。
- 用@ManyToOne 替换了@OneToOne。没有任何反应。
这听起来像是您的 JPA 提供程序中的错误,您应该向他们报告。
我使用的 JPA 提供程序 (DataNucleus) 创建了一个
public static volatile SingularAttribute<Language, mydomain.model.IdentifierCode> identifierCode;
您的一个选择是只使用 CLASSPATH 中的 datanucleus-jpa-query.jar
来生成静态元模型,并将生成的 类 与您现有的提供程序一起使用,或者也将其用于持久性。