gpt4 book ai didi

java - Hibernate:与改变 DiscriminatorValue 相关的风险

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

给定:

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="postType", discriminatorType=DiscriminatorType.STRING)
public class Post {}

@DiscriminatorValue(value = PostType.BUG)
public class BugReport extends Post {}

那是……错误在这个系统中以帖子的形式开始存在。之后,它们可以被提升(?)成为 BugReport。

我正在使用以下方法对此进行更新:

@Transactional
public Post setPostType(Post post, String postType)
{
SQLQuery sql = getSession().createSQLQuery("UPDATE post SET postType = :postType where id = :id");
sql.setString("postType", postType);
sql.setInteger("id", post.getId());
sql.executeUpdate();

getSession().evict(post);
getSession().flush();

Post newPost = get(post.getId());
return newPost;
}

虽然这有效,(帖子类型已更改,并作为 BugReport 从数据库返回)。我很好奇这种方法是否有任何副作用或风险。

最佳答案

Although this works, (the post type is changed, and returned from the db as a BugReport). I'm curious if there are any side effects or risks associated with this approach.

我看到的一个问题是您正在绕过乐观锁定检查,因此更新同一 Post 的并发事务可能会覆盖更改。因此,您可能应该在更新中包含版本检查,如果 executeUpdate 返回的计数不是 1,则抛出异常。

关于java - Hibernate:与改变 DiscriminatorValue 相关的风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723876/

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