Hibernate继承映射

Hibernate继承映射,hibernate,inheritance,mapping,Hibernate,Inheritance,Mapping,基本上,我正在尝试实现一个观察者模式,数据被存储到数据库中,但在检索数据时显示错误。 我试图创建的是一组类别,所有的叶节点都将包含问题。我正在学习hibernate,因此任何帮助都将不胜感激。 错误如下所示 错误:无法解析:层次结构.组件的属性:父\u子\u id 在 org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83) 这是一个组件类 @

基本上,我正在尝试实现一个观察者模式,数据被存储到数据库中,但在检索数据时显示错误。 我试图创建的是一组类别,所有的叶节点都将包含问题。我正在学习hibernate,因此任何帮助都将不胜感激。 错误如下所示

错误:无法解析:层次结构.组件的属性:父\u子\u id 在 org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)

这是一个组件类

@Entity
@Table(name = "Component")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType =    DiscriminatorType.STRING)
public abstract class Component {

@Id 
@GeneratedValue(strategy = GenerationType.AUTO)
private int component_id;
private String name;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_child_id")
private Component parent;

public Component() {

}

public Component(String name, Component parent) {
    super();
    this.name = name;
    this.parent = parent;
}

public int getComponent_id() {
    return component_id;
}

public void setComponent_id(int component_id) {
    this.component_id = component_id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

/*public abstract Iterator<Component> getChildren();

public abstract Component getParent();*/

public List<Component> getChildren() {
    throw new UnsupportedOperationException();   
}

public void setParent(Component parent) {
    this.parent = parent;
}

public Component getParent() {
    return this.parent;
}

public void setSize(int size) {
    throw new UnsupportedOperationException();
}

public int getSize() {
    throw new UnsupportedOperationException();
}
}
这是主课

public class Main {

private SessionFactory factory;

public Main() {
    factory = HibieUtil.getSessionFactory();
}

public void insertData(Component root) {
    Session sessie = factory.openSession();
    Transaction transaction = null;
    try {
        transaction = sessie.beginTransaction();
        sessie.save(root);
        transaction.commit();
    } catch(HibernateException e) {
        if(transaction != null)
            transaction.rollback();
        e.printStackTrace();
    } finally {
        sessie.close();
    }
}

public void showData(Component node) {
    if(node == null) return;
    System.out.println(node.getName());
    Iterator<Component> children = node.getChildren().iterator();
    while(children.hasNext())
        showData(children.next());
}

public void display() {
    Session sessie = factory.openSession();
    Transaction transaction = null;
    try {
        transaction = sessie.beginTransaction();
        Criteria criteria = sessie.createCriteria(Component.class);
        criteria.add(Restrictions.eq("parent_child_id", null));

        @SuppressWarnings("unchecked")
        List<Component> result = criteria.list();
        if(result != null)
            showData(result.get(0));
        transaction.commit();
    } catch(HibernateException e) {
        if(transaction != null)
            transaction.rollback();
        e.printStackTrace();
    } finally {
        sessie.close();
    }
}

public static void main(String[] args) {
    Main main = new Main();
    Component root = new Category("Root", null);
    Component childA = new Category("ChildA", root);
    Component childB = new Category("ChildB", root);
    root.getChildren().add(childA);
    root.getChildren().add(childB);
    Component questionA = new Question("Question A", childA);
    questionA.setSize(10);
    Component quesitonB = new Question("Question B", childA);
    quesitonB.setSize(5);
    childA.getChildren().add(questionA);
    childA.getChildren().add(quesitonB);
    main.insertData(root);
    main.display();
}

}
公共类主{
私营工厂;
公用干管(){
factory=HibieUtil.getSessionFactory();
}
公共void insertData(组件根){
Session Session=factory.openSession();
事务=空;
试一试{
事务=session.beginTransaction();
session.save(根);
commit();
}捕获(休眠异常e){
if(事务!=null)
transaction.rollback();
e、 printStackTrace();
}最后{
session.close();
}
}
公共void showData(组件节点){
if(node==null)返回;
System.out.println(node.getName());
Iterator children=node.getChildren().Iterator();
while(children.hasNext())
showData(children.next());
}
公共空间显示(){
Session Session=factory.openSession();
事务=空;
试一试{
事务=session.beginTransaction();
条件=session.createCriteria(Component.class);
标准.add(Restrictions.eq(“parent_child_id”,null));
@抑制警告(“未选中”)
列表结果=criteria.List();
如果(结果!=null)
showData(result.get(0));
commit();
}捕获(休眠异常e){
if(事务!=null)
transaction.rollback();
e、 printStackTrace();
}最后{
session.close();
}
}
公共静态void main(字符串[]args){
Main Main=新Main();
组件根=新类别(“根”,null);
组件childA=新类别(“childA”,根);
组件childB=新类别(“childB”,根);
root.getChildren().add(childA);
root.getChildren().add(childB);
组成部分问题A=新问题(“问题A”,childA);
问题a.设置大小(10);
部分问题B=新问题(“问题B”,childA);
问题b.设置大小(5);
childA.getChildren().add(问题a);
childA.getChildren().add(quesitonB);
main.insertData(根);
main.display();
}
}

在显示方法中,必须指定组件的propertyname,而不是数据库更改中的列名:

 criteria.add(Restrictions.eq("parent_child_id", null));
作者:

public class Main {

private SessionFactory factory;

public Main() {
    factory = HibieUtil.getSessionFactory();
}

public void insertData(Component root) {
    Session sessie = factory.openSession();
    Transaction transaction = null;
    try {
        transaction = sessie.beginTransaction();
        sessie.save(root);
        transaction.commit();
    } catch(HibernateException e) {
        if(transaction != null)
            transaction.rollback();
        e.printStackTrace();
    } finally {
        sessie.close();
    }
}

public void showData(Component node) {
    if(node == null) return;
    System.out.println(node.getName());
    Iterator<Component> children = node.getChildren().iterator();
    while(children.hasNext())
        showData(children.next());
}

public void display() {
    Session sessie = factory.openSession();
    Transaction transaction = null;
    try {
        transaction = sessie.beginTransaction();
        Criteria criteria = sessie.createCriteria(Component.class);
        criteria.add(Restrictions.eq("parent_child_id", null));

        @SuppressWarnings("unchecked")
        List<Component> result = criteria.list();
        if(result != null)
            showData(result.get(0));
        transaction.commit();
    } catch(HibernateException e) {
        if(transaction != null)
            transaction.rollback();
        e.printStackTrace();
    } finally {
        sessie.close();
    }
}

public static void main(String[] args) {
    Main main = new Main();
    Component root = new Category("Root", null);
    Component childA = new Category("ChildA", root);
    Component childB = new Category("ChildB", root);
    root.getChildren().add(childA);
    root.getChildren().add(childB);
    Component questionA = new Question("Question A", childA);
    questionA.setSize(10);
    Component quesitonB = new Question("Question B", childA);
    quesitonB.setSize(5);
    childA.getChildren().add(questionA);
    childA.getChildren().add(quesitonB);
    main.insertData(root);
    main.display();
}

}
 criteria.add(Restrictions.eq("parent_child_id", null));
 criteria.add(Restrictions.eq("parent", null));