Hibernate JPA@MappedSuperclass和JPAMetaModelEntityProcessor
我有以下情况: 1) 具有复合主键的抽象@MappedSuperClass: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
@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>