我有一个包含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"
由于
答案 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