[英]Spring Data not executing query
我在执行查询时遇到问题。
这是我的结构:
ProductPrice
@Data
@Entity
@Table(name="\"Product_price\"")
public class ProductPrice {
@Id
@SequenceGenerator(name="product_price_id_seq",
sequenceName="product_price_id_seq",
allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="product_price_id_seq")
private long id;
private Float price;
private Date date_from;
@ManyToOne
private Product product;
}
这是我的ProductPriceDto
@Data
public class ProductPriceDto implements Serializable {
public Float price;
public Date date;
}
这是我的价格仓库
public interface PriceRepository extends CrudRepository<ProductPrice, Long> {
public static final String FIND_LAST_PRICE = "SELECT p.price, MAX(p.date_from) FROM ProductPrice p WHERE p.product = ?1 GROUP BY p.product";
@Query(FIND_LAST_PRICE)
ProductPriceDto findPrice(@Param(value = "product") Long product);
@Override
List<ProductPrice> findAll();
}
现在,当我试图执行findPrice
上PriceRepository,我得到的错误:
java.lang.IllegalArgumentException:参数值[1]与预期的类型[com.eternity.model.Product(n / a)]不匹配]
我究竟做错了什么?
编辑
尽管我从Wim收到了很好的答复,但我还是选择:
ProductPrice findFirstByProductIdOrderByDateFromDesc(@Param(value = "product") Long product);
您的查询方法期望使用Long
作为方法参数,但是在JPQL查询中,您需要Product
。
将查询方法参数更改为Product
。
ProductPrice
模型类具有Product product
属性,而不是Long product
,因此,您将遇到该错误。
您应该在下面更改您的PriceRepository
public interface PriceRepository extends CrudRepository<ProductPrice, Long> {
public static final String FIND_LAST_PRICE = "SELECT p.price, MAX(p.date_from) FROM ProductPrice p WHERE p.product = ?1 GROUP BY p.product";
@Query(FIND_LAST_PRICE)
List<ProductPrice> findPrice(@Param(value = "product") Product product);
@Override
List<ProductPrice> findAll();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.