Hibernate继承 - 没有用Id注释的字段

时间:2014-07-29 21:41:30

标签: java hibernate inheritance h2

我一直在阅读有关hibernate继承的一些内容,并且无法将其应用于我的情况。 I tried doing what this post mentioned which seems like it should be what I want.

以下是我正在使用的3个班级 - 每个班级都应有自己的表格:

  • 父类
    • ChildClass
  • SeparateTable

以下基本上是我所提出的。但是,当我尝试在Child类服务上运行我的测试时,它们都在java.lang.IllegalStateException: no field annotated with Id失败。现在,如果我理解该文章/博客的正确发布,我就不需要ChildClass注释Id,因为它应该在父类中被选中。

我可能完全错了,因为我是Hibernate的新手,但如果你们有任何想法,我很高兴听到我做错了什么。

父类

@Table(name="parent_class")
@Inheritance(strategy=InheritanceType.JOINED)
public class ParentClass {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long m_id;

@Column(nullable=false, length=2500)
private String m_variable;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="s_key", nullable=false)
private SeparateTable m_sTable;

etc...
}

ChildClass

@Table(name="child_class")
@PrimaryKeyJoinColumn(name="m_id")
public class ChildClass extends ParentClass {

@Column(nullable=false, length=100)
private String m_name;

@Column(nullable=true, length=250)
private String m_description;

etc...
}

SeparateTable

@Table(name="separate_table")
public class SeparateTable {

@Id
@Column(unique=true, nullable=false, length=100)
private String m_user;

@OneToMany(mappedBy="m_sTable", cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true)
private Set<ParentClass> m_parents;

@OneToMany(mappedBy="m_sTable", cascade={CascadeType.ALL}, fetch=FetchType.LAZY, orphanRemoval=true, targetEntity=ParentClass.class)
private Set<ChildClass> m_children;

etc...
}

2 个答案:

答案 0 :(得分:1)

m_id的范围更改为protected

protected Long m_id;

答案 1 :(得分:0)

事实证明,我们的util类正在为扩展抽象Hibernate类的每个类寻找Id字段。由于子类没有@Id注释,它正在爆炸。

所需要的只是添加一个简单的检查以查看是否有父类,如果有,请从那里获取带注释的字段。