映射对象Hibernate

时间:2014-03-20 14:01:07

标签: java sql hibernate jpa mapping

我试图在我的项目中插入hibernate,但我对映射有问题。 我的数据库包含: - id - > int - 问题 - > VARCHAR - 结果 - > VARCHAR - id_left - > INT - id_right - > INT

这里是我的bean的代码

@Entity
@Table (name = "node")
public class Nodes
{
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column (name = "question")
    private String question;

    @Column ( name = "result")
    private String result;

    @OneToOne(fetch= FetchType.LAZY)
    private Nodes left;

    @OneToOne(fetch= FetchType.LAZY)
    private Nodes right;   

    public Nodes(int id, String question, String result, Nodes left, Nodes right)
    {
           this.id=id;
           this.question=question;
           this.result=result;
           this.left=left;
           this.right=right;
    }

    public Nodes()
    {

    }

        public Nodes getLeftNodes()
    {
        return left;
    }

    public void setLeftNodes(Nodes left)
    {
        this.left=left;
    }

    public Nodes getRightNodes()
    {
        return right;
    }

    public void setRifhtNodes(Nodes right)
    {
        this.right=right;
    }

这里是我的Nodes.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="beans.Nodes" table="node">
        <id name="id" type="int" access="field">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="question" type="java.lang.String">
            <column name="question" />
        </property>
        <property name="result" type="java.lang.String">
            <column name="result" />
        </property>
        <one-to-one name="left" class="beans.Nodes" access="field"></one-to-one>
        <one-to-one name="right" class="beans.Nodes" access="field"></one-to-one>
    </class>
</hibernate-mapping>

和我的展示

public Nodes select (HttpServletRequest request) throws Dao_exception
    {
        List <Nodes> nodeList = new ArrayList<Nodes>();
        nodeList = em.createQuery("SELECT n FROM Nodes n").getResultList();

        return nodeList.get(0);
    }

事实上,它会与我之前向我显示的两个项目一对一地进行2次连接。

为什么呢?因为我想构建我的游戏的二叉树这是一个问题的结果,如果我回答&#34;是&#34;,我离开了,否则就对了。

我的问题是(在我看来)我班级的映射。事实上,当我运行这个程序时,eclipse让我成为大眼睛并留下了我的异常

Call: SELECT id, question, result, LEFT_id, RIGHT_id FROM node
Query: ReadAllQuery(referenceClass=Nodes sql="SELECT id, question, result, LEFT_id, RIGHT_id FROM node")

我知道应用程序出现故障,因为在我的数据库中我没有left / right_id。但是如何告诉程序id_left / right对应于左/右2项,因此成为我的请求。

Call: SELECT id, question, result, id_left, id_right FROM node

1 个答案:

答案 0 :(得分:0)

尝试使用&lt;多对一&gt;映射而不是&lt;一对一&gt;。外键列可以在&lt;中指定。多对一&gt;。 例如,

&LT; many-to-one column =“id_left”name =“left”class =“beans.Nodes”&gt;&lt; /多到一个&GT;