Java 要包含一些额外记录的多个映射

Java 要包含一些额外记录的多个映射,java,hibernate,jpa,Java,Hibernate,Jpa,假设我有以下模型: @Entity public class User { ... @ManyToMany private Set<Permission> allowedPermissions; ... } @Entity public class Permission { ... private boolean isDefault; ... } @实体 公共类用户{ ... @许多 私有设置允许的权限;

假设我有以下模型:

@Entity
public class User {

    ...

    @ManyToMany
    private Set<Permission> allowedPermissions;

    ...

}



@Entity
public class Permission {

    ...

    private boolean isDefault;

    ...

}
@实体
公共类用户{
...
@许多
私有设置允许的权限;
...
}
@实体
公共类许可{
...
私有布尔值是默认值;
...
}
是否可以映射
User.allowedPermissions
,使其既包含连接到
User
权限
,也包含那些具有
isDefault=true
但未显式连接的权限


我使用Hibernate作为Jpa提供程序。

这是不可能的,因为您没有足够的关于用户权限的信息

如果您考虑多对多关系,那么在数据库上,它是两个其他表之间的关系表

现在,在您的用户实体中,您正确地使用了一个集合来查看存储在这个交叉表中的所有关系(比如User_permission)。但是在这个级别上,您无法知道默认权限,这些权限可以通过PermissionDAO非常容易地检索到(我假设您使用的是DAO/服务设计,如果不根据需要进行调整的话)

如果您想要一个超集(allowedPermissions+defaultPermissions),那么您可以在服务层编写一个实用程序方法,如果您愿意:

getAllPermissions(User user) {
   return userDAO.getAllowedPermissions(user).addAll(permissionDAO.getDefaultPermissions()); 
}
为什么在服务层?因为您同时需要两个DAO,并且不希望将一个DAO注入另一个DAO。
让我知道这是否有用。

在创建用户时,您可以将默认权限添加到任何显式选择的权限,以便它们将存在于联接表中。