鉴于:
@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
,则应该在更新中包括版本检查并引发异常。