Java 将外键映射到同一个表中
我有一个数据库有5个数据 -id(主键,内键) -问题(瓦尔查尔) -结果(varchar) -左_id(int) -右_id(int) 并将2个外键放入同一个表中 -左\u id->id -右\u id->id 如何映射外键?是一对一还是多对一 就目前而言,我的哈佛商学院是这样的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
<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());