繁体   English   中英

Custome Spring-Jpa中的错误

[英]Error in Custome Spring-Jpa

下面的查询在mysql中工作正常。

SELECT * FROM utilization u INNER JOIN sbg s on s.sbg_code=u.sbg_code where u.sbg_code=104 

我已经在JPQL查询下面写了。

@Query("SELECT i FROM Utilization i,i.sbg s where s.sbgCode = :sbgCode")
        public ArrayList<Utilization> findUtilization(@Param("sbgCode") int sbgCode);

我遇到错误,请告诉如何解决此错误

由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:未映射i.sbg [从be.g00glen00b.model.Utilization i,i.sbg中选择SELECT,其中s.sbgCode =:sbgCode]

您能告诉我如何将上述sql查询写入JPQL查询吗? 请提出一些链接以学习JPQL联接,因为我对此并不陌生。

下类表示两个表之间的映射

  1. 单板级

     @Entity public class sbg { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int sbgCode; private String sbgdesc; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="iccode") @JsonIgnore private Ic ic; @OneToMany(mappedBy="sbg1", fetch=FetchType.EAGER) private List<Utilization> utilization; public int getSbgCode() { return sbgCode; } public void setSbgCode(int sbgCode) { this.sbgCode = sbgCode; } public String getSbgdesc() { return sbgdesc; } public void setSbgdesc(String sbgdesc) { this.sbgdesc = sbgdesc; } public Ic getIc() { return ic; } public void setIc(Ic ic) { this.ic = ic; } } 
  2. 利用等级

     package be.g00glen00b.model; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Utilization { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int asset_type_key; private String asset_type; private String Engine_status; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "sbgCode") private sbg sbg1; public sbg getSbg1() { return sbg1; } public void setSbg1(sbg sbg1) { this.sbg1 = sbg1; } public int getAsset_type_key() { return asset_type_key; } public void setAsset_type_key(int asset_type_key) { this.asset_type_key = asset_type_key; } public String getAsset_type() { return asset_type; } public void setAsset_type(String asset_type) { this.asset_type = asset_type; } public String getEngine_status() { return Engine_status; } public void setEngine_status(String engine_status) { Engine_status = engine_status; } } 
  3. jpa资料库

     public interface UtilizationRepository extends JpaRepository<Utilization, Integer> { @Query("SELECT i FROM Utilization i,i.sbg s where s.sbgCode = :sbgCode") public ArrayList<Utilization> findUtilization(@Param("sbgCode") int sbgCode); } 

您在查询中缺少JOIN

您的查询应如下所示

SELECT i FROM Utilization i JOIN i.sbg s where s.sbgCode = :sbgCode

进行此类查询时,请记住,可能会得到重复的结果。 如果要获得独特的结果,则应使用Set对此进行查看,以获取通过提示和休眠实现它的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM