从 SQL 视图映射 JPA 实体中的集合属性

Map collection attributes in JPA entity from SQL view

我有以下实体,UserPolicy。一个用户可以有多个策略。我想避免它们之间的关联,首先,因为策略背后的逻辑属于哪个用户也取决于其他事物,其次,为了避免通过直接引用链接聚合根,所以我只在实体中存储一个标识符 classes.

为了让用户连同他的所有附加策略,我决定创建一个 SQL 视图,为了将来参考,我们将其称为 user_permission_view,它看起来像这样,经过简化为简洁起见

 CREATE VIEW "user_permission_view" AS
 SELECT * FROM "users"
 LEFT OUTER JOIN "permissions"
 ON "users"."id" = "permissions"."userId"

生成的视图将具有 UserPolicy 的属性。我决定将其映射到名为 UserPolicyView 的 Java class。但是,我正在努力解决如何将 Policy 中的属性映射到 UserPolicyView.

中的集合字段的问题

是否可以用 JPA 做这样的事情?我是否需要从 UserPolicyView 内部定义与 Policy 实体的关联?如果视图已经包含 JOIN 子句,那将如何影响生成的 SQL?

编辑:

我想到的一个可能的解决方案是完全放弃 user_permission_view,声明一个可嵌入的 PolicyDetails 对象,创建一个包含所有用户权限的视图,并使用 @ElementCollection 指定该视图作为来源 table。那行得通吗?

declare an embeddable PolicyDetails object, create a view containing all user permissions, and use @ElementCollection to specify that view as the source table. Would that work?

从技术角度来看 - 是的,它应该可以工作(我不会评论从域建模的角度来看它是否是一个合理的想法)。您可能还需要 @Immutable,以防止意外修改尝试。

关于您之前的建议 - 您只能将其映射为视图所代表的扁平化结构。恐怕没有集合字段。当然,您可以选择仅将部分视图列映射到属性。但是,我想那不是你想要的。