簡體   English   中英

在數據庫休眠中插入外鍵

[英]Insert foreign key in db hibernate

我有一個包含五個數據的節點數據庫:

  • id(int,PK)
  • 問題(varchar)
  • 結果(varchar)
  • left_id(int,FK)
  • right_id(int FK)

和同一表中的兩個外鍵:

  • left_id-> ID
  • right_id-> id

這是我的豆子:

@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是一個整數!

因為存在外鍵,如何在db中插入left / right_id而不包含left / right_id整數?

非常感謝

如果我理解正確,那么您想創建一個新節點,其中包含對現有左節點的引用。 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM