Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL视图映射JPA实体中的集合属性_Sql_Hibernate_Jpa_Sql View - Fatal编程技术网

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

从SQL视图映射JPA实体中的集合属性,sql,hibernate,jpa,sql-view,Sql,Hibernate,Jpa,Sql View,我有以下实体、用户和策略。一个用户可以有多个策略。我希望避免它们之间的关联,首先,因为策略背后的逻辑属于哪个用户也依赖于其他东西,其次,避免通过直接引用链接聚合根,所以我只在实体类中存储一个标识符 为了让一个用户和他所有的附加策略结合在一起,我决定创建一个SQL视图,作为将来的参考,让我们称它为user\u permission\u view,它看起来像这样,为了简洁而简化 CREATE VIEW "user_permission_view" AS SELECT * FROM "users"

我有以下实体、用户和策略。一个用户可以有多个策略。我希望避免它们之间的关联,首先,因为策略背后的逻辑属于哪个用户也依赖于其他东西,其次,避免通过直接引用链接聚合根,所以我只在实体类中存储一个标识符

为了让一个用户和他所有的附加策略结合在一起,我决定创建一个SQL视图,作为将来的参考,让我们称它为user\u permission\u view,它看起来像这样,为了简洁而简化

 CREATE VIEW "user_permission_view" AS
 SELECT * FROM "users"
 LEFT OUTER JOIN "permissions"
 ON "users"."id" = "permissions"."userId"
结果视图将同时具有用户和策略属性。我决定将其映射到一个名为UserPolicyView的Java类。但是,我正在努力解决如何将属性从策略映射到UserPolicyView中的集合字段

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

编辑:

我提出的一个可能的解决方案是完全放弃user_permission_视图,声明一个可嵌入的PolicyDetails对象,创建一个包含所有用户权限的视图,并使用@ElementCollection将该视图指定为源表。这样行吗

声明可嵌入的PolicyDetails对象,创建包含所有用户权限的视图,并使用@ElementCollection将该视图指定为源表。这样行吗

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


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

是的,我得出了同样的结论。我决定为每个聚合声明SQL视图,将这些视图映射到@Immutable实体,并在其中声明关联。