Java 如何使用Hibernate(Spring)根据外键值从表中选择行
我想得到kotizacija_id等于指定id的所有行。这是我在控制器中的函数Java 如何使用Hibernate(Spring)根据外键值从表中选择行,java,spring,hibernate,Java,Spring,Hibernate,我想得到kotizacija_id等于指定id的所有行。这是我在控制器中的函数 @GetMapping("/kotizacije_cjenovnik/{id}") @Timed public List<KotizacijeCjenovnik> getKotizacijeByKotizacijaId(@PathVariable BigInteger id) { log.debug("REST request to get Kotizacija : {}", id
@GetMapping("/kotizacije_cjenovnik/{id}")
@Timed
public List<KotizacijeCjenovnik> getKotizacijeByKotizacijaId(@PathVariable BigInteger id) {
log.debug("REST request to get Kotizacija : {}", id);
List<KotizacijeCjenovnik> kotizacija_cjenovnik = kotizacijaCjenovnik.getKotizacijeByKotizacijaId(id);
return kotizacija_cjenovnik;
}
但是当我调用函数getKotizacijeByKotizacijaId时,我得到了一个错误:
参数值[1]与预期类型[java.lang.Long n/a]不匹配;嵌套异常为java.lang.IllegalArgumentException:参数值[1]与预期类型[java.lang.Long n/a]不匹配
我的问题是如何选择外键等于指定值的行 您的id被指定为KotizacijeCjenovnik实体中的Long,但您向查询传递了一个BigInteger 将其从大整数更改为长整数
您已将id指定为KotizacijeCjenovnik实体中的Long,但将查询传递为BigInteger 将其从大整数更改为长整数 在您的实体中,您表示id的类型为Long。在你的存储库中,你说它是一个大整数。您应该在存储库中使用Long。对于方法,它应该是 列出findAllByKotizacijeIdLong id 使用JPA时,您不必在实体中编写查询,您可以说id的类型为Long。在你的存储库中,你说它是一个大整数。您应该在存储库中使用Long。对于方法,它应该是 列出findAllByKotizacijeIdLong id
使用JPA时,您不必编写查询,错误消息会显示您使用了错误的类型。它需要long,但您传入了一个BigInteger。尝试:
List<KotizacijeCjenovnik> kotizacija_cjenovnik = kotizacijaCjenovnik.getKotizacijeByKotizacijaId(id.longValue());
错误信息显示,您使用了错误的类型。它需要long,但您传入了一个BigInteger。尝试:
List<KotizacijeCjenovnik> kotizacija_cjenovnik = kotizacijaCjenovnik.getKotizacijeByKotizacijaId(id.longValue());
Kotizacija的id看起来很长,不是BigInteger,但是您可以直接指定Kotizacija而不是它的id。
控制器:
@GetMapping("/kotizacije_cjenovnik/{id}")
@Timed
public List<KotizacijeCjenovnik> getKotizacijeByKotizacijaId(@PathVariable BigInteger id) {
log.debug("REST request to get Kotizacija : {}", id);
Kotizacija kotizacija = new Kotizacija();
kotizacija.setId(id);
List<KotizacijeCjenovnik> kotizacija_cjenovnik = kotizacijaCjenovnik.getKotizacijeByKotizacija(kotizacija);
return kotizacija_cjenovnik;
}
存储库:
@SuppressWarnings("unused")
@Repository
public interface KotizacijeCjenovnikRepository extends
JpaRepository<KotizacijeCjenovnik, BigInteger> {
@Query(value="select kotizacije_cjenovnik from KotizacijeCjenovnik kotizacije_cjenovnik where kotizacije_cjenovnik.kotizacija = :kotizacija")
List<KotizacijeCjenovnik> getKotizacijeByKotizacija(@Param("kotizacija") Kotizacija kotizacija);
}
Kotizacija的id看起来很长,不是BigInteger,但是您可以直接指定Kotizacija而不是它的id。
控制器:
@GetMapping("/kotizacije_cjenovnik/{id}")
@Timed
public List<KotizacijeCjenovnik> getKotizacijeByKotizacijaId(@PathVariable BigInteger id) {
log.debug("REST request to get Kotizacija : {}", id);
Kotizacija kotizacija = new Kotizacija();
kotizacija.setId(id);
List<KotizacijeCjenovnik> kotizacija_cjenovnik = kotizacijaCjenovnik.getKotizacijeByKotizacija(kotizacija);
return kotizacija_cjenovnik;
}
存储库:
@SuppressWarnings("unused")
@Repository
public interface KotizacijeCjenovnikRepository extends
JpaRepository<KotizacijeCjenovnik, BigInteger> {
@Query(value="select kotizacije_cjenovnik from KotizacijeCjenovnik kotizacije_cjenovnik where kotizacije_cjenovnik.kotizacija = :kotizacija")
List<KotizacijeCjenovnik> getKotizacijeByKotizacija(@Param("kotizacija") Kotizacija kotizacija);
}
谢谢,这解决了我的问题。我还需要像@christoph-j建议的那样转换id.longValue。谢谢,这解决了我的问题。我还必须像@christoph-j建议的那样转换id.longValue。