Java 如何使用Hibernate(Spring)根据外键值从表中选择行

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

我想得到kotizacija_id等于指定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。