我有以下设想:
1)带有复合PK的抽象@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.JPAMetaModelEntityProcessor插件通过maven生成JPA元模型。
正在发生的情况是,生成LocalePK元模型时没有任何属性:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(LocalePK.class)
public abstract class LocalePK_ {
}但是,如果我将这个LocalePK设置为没有扩展LocalizedDetail的任何其他实体的复合PK,则会正确地生成它。我需要创建一个“假”实体类来生成这个元模型。
这个模型是否有任何已知的限制来生成正确的PK元模型?
谢谢,
发布于 2017-11-27 14:23:20
这看起来是当前hibernate jpa模型的一个bug。参考资料可以在这里找到(https://hibernate.atlassian.net/browse/HHH-8714)。我发现Hibernate 5.2也是如此
我目前所做的一项工作是在仍然使用hibernate库的同时,将hibernate jpa模型元移出eclipse链接。
我已经用我使用的主要hibernate库进行了测试。
结果是完全构造的类,但它也为扩展生成超类_文件。我发现在条件api (例如AbstractBaseEntity vs InheritingEntity)中使用这个超类时,字段是不填充的,总是为空的。始终确保通过继承类引用类型化属性。例如InheritingEntity.createdTime_
希望这能帮上忙吗
致以亲切的问候,
```javascript<!-- 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>发布于 2018-03-13 09:21:36
根据Java持久化与Hibernate,第二版
@MappedSuperClass
不是个好办法。考虑使用
@Inheritance(stragety = TABLE_PER_CLASS)
而不是。
发布于 2020-11-12 08:06:16
实际上,我找到了一个5.4.23版更新的解决方案--我希望这对更多的人有用。
https://stackoverflow.com/questions/45685521
复制相似问题