【问题标题】:JPA Hibernate 5: OneToOne in nested Embeddable causes metamodel issueJPA Hibernate 5:嵌套 Embeddable 中的 OneToOne 导致元模型问题
【发布时间】:2017-10-12 13:20:33
【问题描述】:

我有一个实体:

@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_ 正确地为 person 生成奇异属性!

似乎在使用多个嵌套嵌入时出现问题。仅使用一级嵌入时,它可以工作。

我尝试了其他东西:

  1. 在类中添加 Access.Field。什么都没有发生。
  2. 实例化@Embedded 类,如@Embedded Language language = new Language()。什么都没有发生。
  3. 将@OneToOne 替换为@ManyToOne。什么都没有发生。

【问题讨论】:

  • 听起来像是您的 JPA 提供程序中的错误。我使用的 JPA 提供程序(不是 Hibernate)创建了一个 public static volatile SingularAttribute&lt;Language, mydomain.model.IdentifierCode&gt; identifierCode;
  • @DN1 你用的是哪个版本?我想和你的提供商一起试试这个
  • DataNucleus JPA。您的一种选择是只使用 CLASSPATH 中的 datanucleus-jpa-query.jar 来生成静态元模型并将这些生成的类与现有的提供程序一起使用,或者也将其用于持久性。
  • 好主意!我用 datanucleus 替换了 hibernate jar,它成功生成了!我会记录一个错误。如果您愿意,可以将其添加为答案。。

标签: jpa hibernate-5.x metamodel


【解决方案1】:

这听起来像是您的 JPA 提供程序中的一个错误,您应该向他们报告。

我使用的 JPA 提供程序 (DataNucleus) 创建了一个 public static volatile SingularAttribute&lt;Language, mydomain.model.IdentifierCode&gt; identifierCode;

您的一个选择是仅使用 CLASSPATH 中的 datanucleus-jpa-query.jar 来生成静态元模型并将这些生成的类与现有的提供程序一起使用,或者也将其用于持久性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 2012-05-04
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多