クエリの実行に問題があります。春データがクエリを実行していません
ここは私の構造体である:
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;
}
は、ここに私のPriceRepository
です私が間違っているのは何java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [com.eternity.model.Product (n/a)]]
:
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();
}
は今、私はPriceRepositoryにfindPrice
を実行しようとしていたとき、私はのエラーを取得していますか?
EDIT
私はヴィムから受け取った良い答えにもかかわらず、私は行くことにdecied:
ProductPrice findFirstByProductIdOrderByDateFromDesc(@Param(value = "product") Long product);
の下にこれは素晴らしいを働いたが、別の問題につながりましたを変更する必要があり
ERROR :GROUP BY句にcolumn "productpri0_.price"を指定するか、集計関数で使用する必要があります:( – uksz
@uksz別の質問をしたいかもしれません。 –
私はそれはあなたが '@ ManyToOne'これは、1つの「製品」製品に対して多くの「価格」の結果があることを意味します。 – ddb