为什么在休眠状态下我的EmbeddedId无法正常工作? [英] Why is my EmbeddedId in hibernate not working?

查看:287
本文介绍了为什么在休眠状态下我的EmbeddedId无法正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HolidayPackageVariant 其中中有一个复合主键(IDHOLIDAYPACKAGE,IDHOLIDAYPACKAGEVARIANT) IDHOLIDAYPACKAGE 指的是 HolidayPackageVariant 之间的 Many One 关系的实体 em> HolidayPackage



当我尝试在HolidayPackageVariant中执行compund PK映射时,出现以下错误:


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

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



我的POJO看起来像这样:
$ b


HolidayPackageVariant:
blockquote>

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

private HolidayPackageVariantPrimaryKey idCompound;

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

//其他代码
}




HolidayPackageVariantPrimaryKey



  @Embeddable 
public final class HolidayPackageVariantPrimaryKey实现Serializable {

private Integer idHolidayPackageVariant;
私人HolidayPackage holidayPackage;
$ b $ public HolidayPackageVariantPrimaryKey(){}
$ b 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,可为空= false)
public HolidayPackage getHolidayPackage(){
return holidayPackage;
}

// equals和hashCode
}



< blockquote>

HolidayPackage




  public final class HolidayPackage {
私人套餐< HolidayPackageVariant> holidayPackageVariants = new HashSet< HolidayPackageVariant>(0);

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

//其他代码
}


解决方案

您不应在 EmbeddedId 类中拥有 @Id 。删除 HolidayPackageVariantPrimaryKey 中的 Id 注释,它应该可以正常工作。

I have a compound Primary Key (IDHOLIDAYPACKAGE, IDHOLIDAYPACKAGEVARIANT) in table HolidayPackageVariant where IDHOLIDAYPACKAGE refers to entity HolidayPackage with a Many to One relationship between HolidayPackageVariant and HolidayPackage.

When I try to do the compund PK mapping in HolidayPackageVariant, I get the following error:

Initial SessionFactory creation failed.org.hibernate.annotations.common.AssertionFailure: Declaring class is not found in the inheritance state hierarchy: org.wah.model.holidaypackage.HolidayPackageVariantPrimaryKey

Can someone please tell me what am I doing wrong here ?

MY POJOs look like this:

HolidayPackageVariant:

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

    private HolidayPackageVariantPrimaryKey idCompound;

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

    // other code
}

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
}

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
}

解决方案

You shouldn't have the @Id in the EmbeddedId Class. Remove the Id annotation in your HolidayPackageVariantPrimaryKey and it should work fine.

这篇关于为什么在休眠状态下我的EmbeddedId无法正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆