将外键映射到同一个表中

时间:2014-04-29 12:30:35

标签: java mysql hibernate mapping

我有一个包含5个数据的数据库 - id(PK,int) - 问题(varchar) - 结果(varchar) - left_id(int) - right_id(int)

和2个外键进入同一个表 - left_id - > ID - right_id - > ID

我如何映射外键?与@一对一或@多对一?

暂时我的hbm喜欢这个

<hibernate-mapping>
    <class name="com.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="com.beans.Nodes" access="field"></one-to-one>
        <one-to-one name="right" class="com.beans.Nodes" access="field"></one-to-one>
    </class>
</hibernate-mapping>

像这样,我的项目开始了。但是如果我把列左/右_id我的项目停止,因为我有2个相同的列。虽然对我来说,我只是把id,问题和结果列放在我的外键......

这是我的表结构

CREATE TABLE "id INT auto_increment NOT NULL PRIMARY KEY,
              question varchar(250),
              result varchar(250),
              left_id INT,
              foreign key (left_id) references node(id) on delete cascade,
              right_id INT,
              foreign key (right_id) references node(id) on delete cascade"

由于

2 个答案:

答案 0 :(得分:0)

您可以像这样使用@JoinColumn

@OneToOne
@JoinColumn(name = "LEFT_ID", referencedColumnName = "ID")
public Nodes getLeftNodes() {
    return leftNodes;
}


@OneToOne
@JoinColumn(name = "RIGHT_ID", referencedColumnName = "ID")
public Nodes getRightNodes() {
    return rightNodes;
}

答案 1 :(得分:0)

我做(node.getQuestion()。getLeft_id()并查看结果。

但我无法插入新的left_id,因为我没有left_id整数。

这是我的插入方法

public void insert_question(String question, int left ) throws HibernateException
    {
        try
        {
            Session session = getSession();
            Transaction tx = session.beginTransaction();

            Nodes node = new Nodes();
            Nodes test = new Nodes();

            node.setQuestion(question);
            node.setLeftNodes(left.getLeftNodes().getId_node());


            session.saveOrUpdate(node);
            tx.commit();
            session.close();
        }
        catch (HibernateException e)
        {
            e.printStackTrace();
        }
    }

没有int left,我可以插入但我没有left_id。 如果我添加

node.setLeftNodes(left.getLeftNodes().getId_node());
Eclipse告诉我&#34;无法在原始类型int&#34;上调用getLeftNodes()。因为left_id整数不存在。

tkanks