我正在尝试实现加入,但我遇到了错误。我有产品表和商店表。 product表通过外键引用store表,如下所示:
Product.java
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long pId;
private String model;
private String brand;
private byte[] image;
private Long price;
private String currency;
private String transmissionType;
private String fuelType;
@ManyToOne
@JoinColumn(name="storeId")
private Store store;
// … getters and setters
}
现在,我展示 Store.java
@Entity
public class Store {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long storeId;
private String locality;
private String city;
private String state;
private String zipCode;
private String phone;
// … getters and setters
}
现在,我展示存储库
public interface ProductRepo extends JpaRepository<Product, Long> {
@Query("select p from Product p join p.storeId s where p.storeId = s.storeId and s.city = :city")
public List<Product> findByCity(@Param("city") String city);
@Query("select p from Product p join p.storeId s where p.storeId = s.storeId and s.state = :state")
public List<Product> findByState(@Param("state") String state);
}
现在,错误来自我实现连接的最后两个查询。我想要做的就是获得所有商店的商店,特别是城市或州,如上所示。
我遇到的错误是:
启动ApplicationContext时出错。显示自动配置 报告在启用“debug”的情况下重新运行您的应用程序。 2016年10月16日 09:53:25.203 ERROR 16132 --- [主要] o.s.boot.SpringApplication:应用程序启动失败
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为'catalogueServiceController'的bean时出错: 通过字段'productRepo'表示不满意的依赖;嵌套 异常是org.springframework.beans.factory.BeanCreationException: 创建名为'productRepo'的bean时出错:调用init方法 失败;嵌套异常是java.lang.IllegalArgumentException: 查询方法public abstract java.util.List的验证失败 com.practice.rest.assignment1.repository.ProductRepo.findByCity(java.lang.String中)! 等等....
我的查询中有什么错误?
答案 0 :(得分:3)
查询无效。您指的是不存在的p.storeId
。我觉得这样的事情应该足够了:
select p from Product where p.store.city = :city
或者:
select p from Product join p.store as store where store.city = :city
上层应该足够,因为您的JPA提供商应该能够为您做正确的事情。如果您想更具体地了解连接类型以优化查询,则可能首选后者。
这同样适用于其他查询。为了将来的参考:你切断异常堆栈跟踪的一切都将是有趣的部分。如果持久性提供者拒绝JPQL,他们通常会非常具体地了解他们遇到的错误。所以你应该能够在p.storeId
周围的某个地方找到一些无效的引用,实际上是在堆栈跟踪的深处。