gpt4 book ai didi

java - 使用查询更新对象外键

转载 作者:行者123 更新时间:2023-11-30 00:15:43 24 4
gpt4 key购买 nike

我想更新与作为查询对象的同一表关联的外键。

我可以像这样插入新数据(问题和外键)

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

Nodes node = new Nodes();
Nodes leftNode = new Nodes();
Nodes rightNode = new Nodes();

node.setQuestion(question);

leftNode.setId_node(left);
node.setLeft(leftNode);

rightNode.setId_node(right);
node.setRight(rightNode);

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

但是我无法使用此方法更新现有数据

public void update(int last_left_id, int new_left_id)
{
try
{
Session session = getSession();
Transaction tx = session.beginTransaction();
Nodes leftNode = new Nodes();
Nodes node = new Nodes();

leftNode.setId_node(last_left_id);
node.setLeft(leftNode);


Query query = getSession().createQuery("update Nodes set left_id = :left_id"+" where id = :id" );
query.setParameter("left_id", leftNode);
query.setParameter("id", new_left_id);
int result = query.executeUpdate();

session.close();

使用第一种方法,我的外键被插入到我的表中。但使用第二种方法,我无法更新现有的外键

这是我的错误

Grave: Cannot add or update a child row: a foreign key constraint fails (`akinator`.`node`, CONSTRAINT `node_ibfk_1` FOREIGN KEY (`left_id`) REFERENCES `node` (`id`) ON DELETE CASCADE)
Grave: org.hibernate.exception.ConstraintViolationException: could not execute update query

我该怎么办?

非常感谢

最佳答案

如果您无法通过代码执行任何操作,那么最好运行 sql patch 。实际上,在我们的应用程序中,我们通过在启动时运行脚本来执行相同的操作。所以这种方式可能会解决你的问题。

例如,如果您想在订单表上添加外键,则使用 java 编写一个程序在启动操作时执行此脚本。

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

这没有帮助,但我建议你我们可以使用这种方式来做到这一点。 :)

谢谢。

关于java - 使用查询更新对象外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676623/

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