在db hibernate中插入外键

时间:2014-05-01 15:38:58

标签: java mysql database hibernate foreign-keys

我有一个包含五个数据的节点数据库:

  • id(int,PK)
  • question(varchar)
  • result(varchar)
  • left_id(int,FK)
  • right_id(int FK)

和同一个表中的两个外键:

  • left_id - > ID
  • right_id - > ID

这是我的bean:

@Entity
@Table (name = "node")
public class Nodes
{
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name="id")
    @NotNull
    private int id;

    @Column (name = "question")
    private String question;

    @Column ( name = "result")
    private String result;

    @OneToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="left_id", referencedColumnName="id")
    private Nodes left;

    @OneToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="right_id", referencedColumnName="id")
    private Nodes right;

我可以通过以下方式查看left_id:

nodes.getLeftNodes().getId_node();

但我无法在我的数据库中插入新数据left / right_id

我的插入方法是

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

            Nodes node = new Nodes();

            node.setQuestion(question);
            node.setId_node(left_id);

            session.saveOrUpdate(node);
            tx.commit();
            session.close();
        }

问题是插入数据库但不是left_id。对我来说,问题是外键(节点左或右)是一个对象,但在我的数据库中,left_id是一个整数!

如何在没有left / right_id整数的情况下在数据库中插入left / right_id,因为有外键?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望创建一个新节点,其中包含对现有左节点的引用。并且left_id(我将重命名leftId以符合标准命名约定)是现有左节点的标识符。

所以它非常简单:首先需要获取对数据库中现有节点左侧节点的引用,创建引用此左侧节点的新节点,插入新节点:

Node leftNode = (Node) session.load(Node.class, leftId);

Node node = new Node();
node.setQuestion(question);
node.setLeft(leftNode);

session.save(node);

请注意,我还将Nodes重命名为Node。此类的实例表示一个节点,因此没有理由将此类命名为Nodes

相关问题