Java Springdata JPA存储库findAllByXXX()返回null而不是空列表

Java Springdata JPA存储库findAllByXXX()返回null而不是空列表,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我使用的是springboot 2.1.2,在存储库方面遇到了一些问题。 以下是我的实体类: @Entity @Getter @Setter @NoArgsConstructor @Table(name = "orders") public class Order { @Id @GeneratedValue private long id; @ManyToOne(targetEntity = User.class) private User user;

我使用的是springboot 2.1.2,在存储库方面遇到了一些问题。 以下是我的实体类:

@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private long id;

    @ManyToOne(targetEntity = User.class)
    private User user;

    //other fields and getters and setters are ignored
}

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {

    @Id
    private String email;

    //other fields and getters and setters are ignored
}
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(targetEntity = User.class)
    private User user;

    //other fields and getters and setters are ignored
}

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {

    @Id
    private Long userId;
    private String email;

    //other fields and getters and setters are ignored
}
以及我的OrderRepository:

@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {

    @Query("select o from Order o where o.user.email = ?1")
    List<Order> findAllByUserId(String userId);

    List<Order> findAllByUser(User user);
}

您的代码不明确。如果您想通过电子邮件获得订单列表,请按以下方式填写。不需要
@Query

public interface OrderRepository extends JpaRepository<Order, Long> {

    List<Order> findAllByUserEmail(String email);

}

您的
OrderRepository
界面中的以下方法签名应该有效:

List<Order> findByUser_UserEmail(String email);

我没有在您的“用户”中看到任何
userId
class@AritraPaul我使用
@Query
注释,并指定用户电子邮件的条件,因此用户ID是否存在并不重要,这不是惯例。试着遵循惯例并坚持it@QYC,我还建议您进行standart存储库查询,如
findAll()
,如果它显示一些结果-好的,如果没有-代码库或配置中存在一些问题。所以你需要调试。@BSeitkazin哇,findAll()也返回null…它仍然返回null…我已经按照你的建议更改了接口:
List findallbyseremail(String email)
您将
电子邮件
设置为
@Id
,这使得它独一无二。这意味着没有机会得到一份我已经更新了答案的清单。尝试订单和用户之间存在单向的
多对一
关系,我想做的是获取特定用户拥有的订单,并且用户可以映射到多个订单,因此它应该返回一个列表而不是单个结果。@QYC,您确定表的名称是
订单
?哪个查询生成Spring数据?如果在数据库引擎中执行查询,会怎么样?数据库中的表结构是什么?我真的认为,你犯了一些打字错误。我已经更新了我的问题,希望补充信息能有所帮助
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(targetEntity = User.class)
    private User user;

    //other fields and getters and setters are ignored
}

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {

    @Id
    private Long userId;
    private String email;

    //other fields and getters and setters are ignored
}
List<Order> findByUser_UserEmail(String email);
@Query("select o from Order o join User u where u.email = :email") List<Order> findAllByUserEmail(String email);
public class Order {
    @ManyToOne
    @JoinColumn(name="user_email")
    private User user;

}

public class User {
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private Set<Order> orders;
}