java - Spring JPA 获取ManyToMany

标签 java spring jpa spring-data spring-data-jpa

我有一个具有权限的用户(多对多关系):

@Entity
@Table(name = "user")
public class User {
    @JsonIgnore
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
        name = "user_authority",
        joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")},
        inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")})
    private Set<Authority> authorities = new HashSet<>();

}


@Entity
@Table(name = "authority")
public class Authority implements Serializable {

    @Id
    @Column(length = 50, nullable = false)
    private String name;

}

Liquibase(没有用户,他只有一个 id):

<createTable tableName="authority">
        <column name="name" type="varchar(50)">
            <constraints primaryKey="true" nullable="false"/>
        </column>
    </createTable>

    <createTable tableName="user_authority">
        <column name="user_id" type="bigint">
            <constraints nullable="false"/>
        </column>
        <column name="authority_name" type="varchar(50)">
            <constraints nullable="false"/>
        </column>
    </createTable>

    <addPrimaryKey columnNames="user_id, authority_name" tableName="user_authority"/>
    ...

我必须获取所有用户权限,这等于某个名称。例如,我必须获取所有管理员(具有权限“ROLE_ADMIN”的用户)。

最佳答案

没有自定义查询,这可以工作:

List<Authority> admin_authorities = authorityRepository.findByName("ROLE_ADMIN");
List<User> admins = userRepository.findByAuthoritiesIn(admin_authorities);

关于java - Spring JPA 获取ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36106225/

相关文章:

java - 在java中遍历多张excel

java - Spring Cloud 配置模式匹配不适用于 SVN

java - 如何在 JPA 中从只有一列的表创建 id 生成器

java - c3p0 在无法到达主机时不会超时

java - Hadoop Mapper 类中的参数

java - 空格不匹配

Java 泛型 : Why Does Map. get() 忽略类型?

java - MismatchedTokenException : expecting "set", 发现 '='

java - Spring security 阻止 css、js 文件加载到 jsp 页面上

orm - Eclipselink - 坚持后的ID仍然为空