我试图在我的项目中插入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
答案 0 :(得分:0)
尝试使用&lt;多对一&gt;映射而不是&lt;一对一&gt;。外键列可以在&lt;中指定。多对一&gt;。 例如,
&LT; many-to-one column =“id_left”name =“left”class =“beans.Nodes”&gt;&lt; /多到一个&GT;