Java Springdata JPA存储库findAllByXXX()返回null而不是空列表
我使用的是springboot 2.1.2,在存储库方面遇到了一些问题。 以下是我的实体类: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;
@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;
}