2016-02-08 50 views
0

比方說,我有以下型號:多對多映射到包括一些額外的記錄

@Entity 
public class User { 

    ... 

    @ManyToMany 
    private Set<Permission> allowedPermissions; 

    ... 

} 



@Entity 
public class Permission { 

    ... 

    private boolean isDefault; 

    ... 

} 

是否有可能映射User.allowedPermissions,使其既包含Permissions被連接到User以及這些與isDefault = true但不明確連接?

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

+0

在創建用戶時,您可以將默認權限添加到任何明確選擇的位置,以便它們存在於連接表中。 –

回答

0

這是不可能的,因爲你沒有足夠的用戶權限信息。

如果你認爲在多對多關係中,在數據庫上它是兩個其他表之間的關係表。

現在,在您的User實體中,您正確使用Set來查看存儲在此交叉表中的所有關係(比方說user_permission)。但是在這個級別上,你無法知道默認權限,可以通過PermissionDAO非常輕鬆地獲取(我假設你使用的是DAO /服務設計,如果不是根據需要進行調整)。

如果你想有一個超集(allowedPermissions +缺省權限),那麼你也許可以寫在業務層的實用工具方法,如果你喜歡:

getAllPermissions(User user) { 
    return userDAO.getAllowedPermissions(user).addAll(permissionDAO.getDefaultPermissions()); 
} 

爲什麼在提供服務層?因爲您需要同時使用兩個DAO,並且您不想將DAO注入另一個。 讓我知道這是否有用。