У меня есть простой класс, как вы можете видеть ниже:
@Entity
@Table(name = "post")
public class Post {
@Id
@GeneratedValue
Long id;
@Column(name = "title")
String title;
@Formula("(select current_date())")
Date currentDate;
@OneToMany(mappedBy = "post")
Set<PostComment> commentList = new HashSet<>();
}
и я хочу обновить эту сущность в сервисе:
@Service
@Transactional
public class PostService {
private final PostRepository postRepository;
public PostService(PostRepository postRepository) {
this.postRepository = postRepository;
}
@Transactional
public Post save(Post entity) {
Post post = postRepository.saveAndFlush(entity);
System.out.println("current_date: " + post.getCurrentDate());
post.getCommentList().forEach(pc -> System.out.println(pc.getReview()));
return post;
}
}
И когда я проверяю журналы гибернации, он сначалаselect
все поля Post
сущности, но когда я вызываю post.getCurrentDate()
(с пометкой @Formula
), возвращается null
:
Hibernate: select post0_.id as id1_0_0_, post0_.title as title2_0_0_, (select current_date()) as formula0_0_ from post post0_ where post0_.id=?
Hibernate: update post set title=? where id=?
current_date: null
Hibernate: select commentlis0_.post_id as post_id3_1_0_, commentlis0_.id as id1_1_0_, commentlis0_.id as id1_1_1_, commentlis0_.post_id as post_id3_1_1_, commentlis0_.review as review2_1_1_ from post_comments commentlis0_ where commentlis0_.post_id=?
review
Почему он возвращает и регистрирует commentList
, но нене вернешься currentDate
?это ошибка гибернации?
ПРИМЕЧАНИЕ
Я поместил полный пример проекта в github, который вы можете увидеть здесь .