我有一個具有角色的用戶物體。角色物體具有特權。我的物體看起來像這樣:
@Entity
public class User {
@ManyToOne
public Role role;
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
@Entity
public class Role {
@ManyToMany
private Set<Privilege> privileges;
public Set<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
}
@Entity
public class Privilege {
private String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
我想用他的角色和這個角色的權限加載一個用戶。
我嘗試使用 @Query 注釋在我的 JpaRepository 中定義一個方法
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
@Query("SELECT u FROM User u "
"INNER JOIN u.role r "
"INNER JOIN r.privileges p "
"WHERE u.id = ?1")
Optional<User> findByIdWithRoleAndPrivileges(Long id);
}
我的用戶加載了他的角色物件,但沒有加載角色的權限。知道我做錯了什么嗎?
uj5u.com熱心網友回復:
默認情況下,大多數關聯都是延遲獲取的。要急切地獲取多對多角色權限關聯,請將您的查詢更改為:
@Query("SELECT u FROM User u "
"INNER JOIN FETCH u.role r "
"INNER JOIN FETCH r.privileges p "
"WHERE u.id = ?1")
“JOIN FETCH”是導致 JPA/Hibernate 急切地獲取關聯物體的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531980.html
上一篇:考慮在你的配置中定義一個'org.modelmapper.ModelMapper'型別的bean
下一篇:如何對大串列進行單元測驗?
