java - Spring Data JPA - 将@Query 与多对多关系/连接表结合使用

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

我有一个与角色实体具有多对多关系的用户实体。

    @Entity
@Table(name = "auth_user")
public class OAuthUser {

    // @Autowired
    // @Transient
    // private PasswordEncoder passwordEncoder;
    //
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "username")
    private String userName;

    @Column(name = "password")
    @JsonIgnore
    private String password;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email")
    private String email;

    @Column(name = "is_enabled")
    private boolean isEnabled;

    /**
     * Reference:
     * https://github.com/nydiarra/springboot-jwt/blob/master/src/main/java/com/nouhoun/springboot/jwt/integration/domain/User.java
     * Roles are being eagerly loaded here because they are a fairly small
     * collection of items for this example.
     */
    @ManyToMany(fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private List<Role> roles;

    @ManyToMany(fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    @JoinTable(name = "user_properties", joinColumns = @JoinColumn(name = "AuthID", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "PropertyID", referencedColumnName = "id"))
    private List<Property> properties;

我正在使用 Spring Data JPA 存储库,并且能够创建一个自定义 @Query,它根据特定角色 ID 返回用户列表。

    @Query("SELECT u FROM auth_user as u WHERE u.isEnabled AND u.id IN"
        + " (SELECT r.user_id FROM user_role as r WHERE r.role_id = ?1)")
public List<OAuthUser> findByRole(int roleID);

上面的代码会导致错误auth_user is not met。我确实明白为什么我会收到错误;该框架使用实体名称(OAuthUser)而不是表(auth_user)来执行查询。这通常不会成为问题,除非没有 user_role 实体;它只是一个包含两列的连接表:“user_id”和“role_id”。

实现这一目标的适当方法是什么?

谢谢。

最佳答案

错误提示:

auth_user is not mapped

它指的是查询中使用的auth_user,例如SELECT u FROM auth_user。在查询中,它必须是 OAuthUser

关于java - Spring Data JPA - 将@Query 与多对多关系/连接表结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50471162/

相关文章:

java - 如何使用 SWT 在 java 中创建自定义面包屑控件?

java - 检查 map 是否包含键

spring - 我可以使用 spring boot 数据源来获取连接对象,以便手动将其与 conn.executeQuery() 一起使用吗?

java - CrudRepository : Return one result, 按列排序

java - Spring @Async 和同步

java - Play 框架 2.3 中一种 Controller 方法的不同 URL 选择 View

java - 是否可以通过 json-schema 检查是否仅存在必填字段?

java - 为 GWT/Spring/Hibernate/PostgreSQL 生成服务/dao 层

java - 等待 API 响应的 RESTTemplate

java - spring-projects/spring-data-commons 中的 PageableHandlerMethodArgumentResolver