Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将外键映射到同一个表中_Java_Mysql_Hibernate_Mapping - Fatal编程技术网

Java 将外键映射到同一个表中

Java 将外键映射到同一个表中,java,mysql,hibernate,mapping,Java,Mysql,Hibernate,Mapping,我有一个数据库有5个数据 -id(主键,内键) -问题(瓦尔查尔) -结果(varchar) -左_id(int) -右_id(int) 并将2个外键放入同一个表中 -左\u id->id -右\u id->id 如何映射外键?是一对一还是多对一 就目前而言,我的哈佛商学院是这样的 <hibernate-mapping> <class name="com.beans.Nodes" table="node"> <id name="id" typ

我有一个数据库有5个数据 -id(主键,内键) -问题(瓦尔查尔) -结果(varchar) -左_id(int) -右_id(int)

并将2个外键放入同一个表中 -左\u id->id -右\u id->id

如何映射外键?是一对一还是多对一

就目前而言,我的哈佛商学院是这样的

<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>

谢谢

您可以像这样使用@join列

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


@OneToOne
@JoinColumn(name = "RIGHT_ID", referencedColumnName = "ID")
public Nodes getRightNodes() {
    return rightNodes;
}
我需要(node.getQuestion().getLeft_id())并查看结果

但我无法插入新的左id,因为我没有左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\u id。 如果我加上

node.setLeftNodes(left.getLeftNodes().getId_node());
Eclipse告诉我“无法在基元类型int上调用getLeftNodes()”,因为left_id integer不存在


tkanks

你能发布你的表结构吗好的,我只是发布了我的表结构。谢谢你的hbm条目应该是这样的,并确保在节点类中有一个名为left\u id的属性。好的,谢谢。但是我不需要left/right\u id整数。如果没有变量,如何在我的对象中保留left\u id?例如,我想(node.getQuestion().getLeftid()).ThanksIt不会为left_id和rigt_id指定单独的整数。它是类节点的外键。因此,它的Nodes.id是另一个节点的记录。为了给出一个正确的示例,您可以假设员工与经理有关系,而经理又是一名员工。因此,员工的经理id是另一个员工id。
node.setLeftNodes(left.getLeftNodes().getId_node());