Hibernate JPA@MappedSuperclass和JPAMetaModelEntityProcessor

Hibernate JPA@MappedSuperclass和JPAMetaModelEntityProcessor,hibernate,jpa,Hibernate,Jpa,我有以下情况: 1) 具有复合主键的抽象@MappedSuperClass: @MappedSuperclass @EqualsAndHashCode(of = { "id" }, callSuper = false) public abstract class LocalizedDetail { private static final long serialVersionUID = 1L; @EmbeddedId @Getter @Setter p

我有以下情况:

1) 具有复合主键的抽象@MappedSuperClass:

@MappedSuperclass
@EqualsAndHashCode(of = { "id" }, callSuper = false)
public abstract class LocalizedDetail {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @Getter
    @Setter
    private LocalePK id;
(...)
2) 这是我的PK:

@Embeddable
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class LocalePK implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "ID", length = 256)
    @Getter
    @Setter
    private String id;

    @Column(name = "LOCALE", length = 16)
    @Getter
    @Setter
    private String locale;

}
3) LocalizedDetail子类:

@Entity
@Table(name = "BT_VALUE_OBJECT_INFO")
public class ValueObjectInfo extends LocalizedDetail {
(...)
4) 使用org.hibernate.jpamodelgen.jpametamodelenticyprocessor插件通过maven生成JPA元模型

发生的情况是,生成的LocalePK元模型没有任何属性:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(LocalePK.class)
public abstract class LocalePK_ {


}
但是,如果我将此LocalePK设置为任何其他实体的组合PK,而该实体没有扩展LocalizedDetail,那么它将正确生成。我需要创建一个“假”实体类来生成这个元模型

该模型是否存在生成正确PK元模型的已知限制


谢谢,

这看起来是当前hibernate jpa modelgen的一个bug。可在此处找到参考()。 我发现Hibernate5.2也是如此

目前我所做的一项工作是在仍然使用hibernate库的情况下,为EclipseLink-one开发HibernateJPA模型

我已经用我使用的主要hibernate库进行了测试

结果是完全构造类,但它也为扩展生成超类文件。 我发现在CriteriaAPI中使用这个超类时(例如AbstractBaseEntity vs InheritingEntity),字段没有填充,并且总是空的。 始终确保通过继承类引用类型化属性。 e、 g.
inheritingtity.createdTime\u

希望这能有所帮助

亲切问候,

```


org.hibernate
冬眠核心
5.2.12.最终版本
罐子
测试
org.hibernate
休眠验证器
5.4.2.最终版本
罐子
org.hibernate
休眠注释
3.5.6-最终版本
罐子
测试
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
罐子
测试
org.hibernate
hibernate-c3p0
5.2.12.最终版本
罐子
测试
org.eclipse.persistence
org.eclipse.persistence.jpa.modelgen.processor
2.7.0
杰克森
杰克森
1.1.6
罐子
测试

```

根据Java持久化与Hibernate,第二版

@MappedSuperClass

这不是一个好办法。考虑使用

继承(stragety=TABLE\u PER\u CLASS)


相反

事实上,我找到了一个更新的解决方案,我希望这对其他人有用。

是的,这很有意义!我将把你的答案标记为正确,以便在这方面帮助他人。非常感谢。PS:我改变了我的实体结构,所以这个问题不再发生。
    <!-- Hibernate -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.12.Final</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.2.Final</version>
        <type>jar</type>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.6-Final</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.2.12.Final</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.7.0</version>
    </dependency>

    <!--
        Cant use hibernate jpa model gen cause of https://hibernate.atlassian.net/browse/HHH-8714
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>5.2.12.Final</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>-->

    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.6</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>