为什么我的EmbeddedId在休眠状态下不起作用?

bra*_*ter 20 java hibernate jpa composite-primary-key hibernate-annotations

我有一个复合主键(IDHOLIDAYPACKAGE, IDHOLIDAYPACKAGEVARIANT)的表HolidayPackageVariant,其中IDHOLIDAYPACKAGE指的是实体HolidayPackage许多一个关系HolidayPackageVariantHolidayPackage.

当我尝试在HolidayPackageVariant中进行compund PK映射时,我收到以下错误:

初始SessionFactory创建failed.org.hibernate.annotations.common.AssertionFailure:在继承状态层次结构中找不到声明类:org.wah.model.holidaypackage.HolidayPackageVariantPrimaryKey

有人可以告诉我这里我做错了什么吗?

我的POJO看起来像这样:

HolidayPackageVariant:

@Entity
@Table(name="HOLIDAYPACKAGEVARIANT")
public final class HolidayPackageVariant {

    private HolidayPackageVariantPrimaryKey idCompound;

    @EmbeddedId
    public HolidayPackageVariantPrimaryKey getIdCompound() {
        return idCompound;
    }

    // other code
}
Run Code Online (Sandbox Code Playgroud)

HolidayPackageVariantPrimaryKey

@Embeddable
public final class HolidayPackageVariantPrimaryKey implements Serializable {

    private Integer idHolidayPackageVariant;
    private HolidayPackage holidayPackage;

    public HolidayPackageVariantPrimaryKey(){}

    public HolidayPackageVariantPrimaryKey(int id, HolidayPackage pkg){
        setIdHolidayPackageVariant(id);
        setHolidayPackage(pkg);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "IDHOLIDAYPACKAGEVARIANT", nullable = false)
    public Integer getIdHolidayPackageVariant() {
        return idHolidayPackageVariant;
    }

    @Id
    @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="IDHOLIDAYPACKAGE", nullable=false)
    public HolidayPackage getHolidayPackage() {
        return holidayPackage;
    }

    // equals and hashCode
}
Run Code Online (Sandbox Code Playgroud)

HolidayPackage

public final class HolidayPackage {
    private Set<HolidayPackageVariant> holidayPackageVariants = new HashSet<HolidayPackageVariant>(0);

    @OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, mappedBy = "idCompound.holidayPackage")
    public Set<HolidayPackageVariant> getHolidayPackageVariants() {
        return holidayPackageVariants;
    }

    // other code
}
Run Code Online (Sandbox Code Playgroud)

小智 82

你不应该@IdEmbeddedId课堂上.删除Id你的注释,HolidayPackageVariantPrimaryKey它应该工作正常.

  • 这也解决了我的问题.我认为这应该被标记为答案而不是前一个答案. (4认同)