Дано:
@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
). Мне любопытно, есть ли побочные эффекты или риски, связанные с этим подходом.