JPA @MappedSuperclass和JPAMetaModelEntityProcessor

时间:2017-08-15 02:04:32

标签: hibernate jpa

我有以下情况:

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元模型?

谢谢,

2 个答案:

答案 0 :(得分:0)

根据Java Persistence with Hibernate,Second Edition

@MappedSuperClass

不是一个很好的方法。考虑使用

@Inheritance(stragety = TABLE_PER_CLASS)

代替。

答案 1 :(得分:0)

实际上,我找到了将其更新为Version 5.4.23.的解决方案,希望对其他任何人都有用。