gpt4 book ai didi

java - 在 db hibernate 中插入外键

转载 作者:行者123 更新时间:2023-11-30 00:18:54 25 4
gpt4 key购买 nike

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

  • id(整数,PK)
  • 问题(varchar)
  • 结果(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 ?

非常感谢

最佳答案

如果我理解正确,您想要创建一个新节点,其中包含对现有左节点的引用。 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

关于java - 在 db hibernate 中插入外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com