为什么在休眠状态下我的EmbeddedId无法正常工作? [英] Why is my EmbeddedId in hibernate not working?
问题描述
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屋!
查看全文