gpt4 book ai didi

java - 如何通过 Hibernate 直接更新外键值?

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

我有几个对象使用 Hibernate、BatchTransaction 和 Transaction 映射到数据库中的表。 BatchTransaction 的表 (batch_transactions) 有一个指向交易的外键引用,名为 transaction_id。

在过去,我使用了一个批处理运行器,它使用内部调用来运行批处理事务,并在事务完成后完成从 BatchTransaction 到 Transaction 的引用。插入事务后,我只需调用 batchTransaction.setTransaction(txn),因此我有一个从 BatchTransaction 到事务的 @ManyToOne 映射。

我正在更改批处理运行器,以便它通过 Web 服务执行其事务。新插入的事务的 ID 将由服务返回,我想直接更新 BatchTransaction 中的 transaction_id(而不是使用 BatchTransaction 上事务字段的 setter ,这将要求我不必要地加载新插入的项目)。

看起来最合乎逻辑的方法是使用 SQL 而不是 Hibernate,但我想知道是否有更优雅的方法。有什么想法吗?


这是基本映射。

批量查询.java

@Entity
@Table(name = "batch_queries")
public class BatchQuery
{
@ManyToOne
@JoinColumn(name = "query_id")
public Query getQuery()
{
return mQuery;
}
}

查询.java

@Entity
@Table(name = "queries")
public class Query
{
}

想法是更新 batch_queries 中的 query_id 列,而不在 BatchQuery 对象上设置“query”属性。

最佳答案

使用直接SQL更新,或者HQL更新,当然是可行的。

没有看到完整的问题,在我看来您可能正在对您的域进行修改,这值得在您的域中进行记录。您可能正在转向拥有一个 BatchTransaction,该 BatchTransaction 的成员只有 TransactionId 而不是完整的交易。

如果在其他 Activity 中,BatchTransaction 仍需要补充该事务,我会考虑为 TransactionId 添加一个单独的映射,并将其作为管理映射(使事务关联更新并插入 false)。

如果 BatchTransaction 不再关注完整的交易,只需在添加 TransactionId 字段后删除该关联。

关于java - 如何通过 Hibernate 直接更新外键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325729/

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