鉴于:

@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的形式从数据库返回)。我很好奇这种方法是否有副作用或风险。

最佳答案

尽管这可行,但是(帖子类型已更改,并作为BugReport从数据库返回)。我很好奇这种方法是否有副作用或风险。


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

10-06 09:02