Hibernate不在集合表中

时间:2017-08-23 08:18:45

标签: java hibernate

我在表格ReleaseNote中保存了一个班级RELEASE_NOTES,并在RELEASE_NOTE_USER_READRELEASE_NOTE_ID列中保存了一个表USER_ID,我要保存哪些用户已经阅读过发行版注释,所以我不会再显示它了。

由于我们使用的是微服务架构,我在微服务中没有用户对象,也不想添加用户对象。虽然向ReleaseNote添加字段usersRead不会有问题,该ReleaseNote包含已读取releaseNote的所有用户的userId。

我需要执行两项操作:

  1. 将要保存在表中的releaseNoteId列表传递给给定的userId,这样我就可以跟踪用户已阅读的releaseNotes。
  2. 选择用户尚未阅读的所有releaseNotes。这个SQL语句看起来像: SELECT * FROM RELEASE_NOTES WHERE ID NOT IN (SELECT RELEASE_NOTE_ID FROM RELEASE_NOTE_USER_READ WHERE USER_ID = :userId)
  3. 如何使用EntityManager或Hibernate特定功能实现此目的?

1 个答案:

答案 0 :(得分:0)

自己找到解决方案。添加字段将usersRead设置为ReleaseNote并注释如下:

@ElementCollection
@CollectionTable(name = "RELEASE_NOTES_USER_READ",
    joinColumns = @JoinColumn(name = "RELEASE_NOTE_ID"))
@Column(name = "USER_ID", table = "RELEASE_NOTES_USER_READ")
private Set<Integer> usersRead = new HashSet<>();