如何使用外键在 Spring Data/JPA 中执行查询?

Jos*_*bre 5 java mysql spring jpa spring-data

我有一个问题,我需要使用表中的外键执行查询。问题是,在上面的@Query(在上面的 ExpenseRepository 中制作)中,我的日志说他不是按用户 ID(外键)搜索,而是搜索费用实体类的主键。

这是我的用户实体类:

@Entity
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String email;

    @NotBlank(message = "Password required")
    @Size(min = 6)
    private String password;

    //getters and setters
Run Code Online (Sandbox Code Playgroud)

这是我的费用实体类:

@Entity
public class Expenses implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private long limitValue;
    private long spentValue;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "id")
    private User user;

    //getters and setters here
Run Code Online (Sandbox Code Playgroud)

最后,这是我自己进行查询的存储库

public interface ExpensesRepository extends JpaRepository< Expenses, Long> {


    @Query("FROM Expenses g where g.id = :userId")
    GestaoGastos findAllByCurrentUser(@Param("userId") Long userId);

}
Run Code Online (Sandbox Code Playgroud)

小智 8

使用字段,而不是列 @Query

public interface ExpensesRepository extends JpaRepository< Expenses, Long> {
    @Query("FROM Expenses g where g.user.id = :userId")
    GestaoGastos findAllByCurrentUser(@Param("userId") Long userId);
}
Run Code Online (Sandbox Code Playgroud)