[java.lang.NullPointerException尝试更新SQL表时

问题描述 投票:0回答:1

我正在尝试使用以下方式更新“ PA49_Debut”列:-第二个表中的“ PA49_Debut”值(如果该产品存在)-如果产品在前几行中存在,则从同一表中返回“ PA49_Debut”-否则来自同一表的“ PA49_Actuel”看看存储库中的代码

 public interface FSrepository extends JpaRepository<FSmodel, String> {
  @Transactional 
  @Modifying
  @Query("Update FSmodel FS Set FS.PA49_Debut = CASE WHEN EXISTES (SELECT 1 FROM ISmodel SI where FS.Partnumber=SI.Partnumber)" + 
        " THEN SI.PA49 " + 
        "WHEN EXISTS (SELECT 1 FROM FSmodel FS2 WHERE FS.Partnumber=FS2.Partnumber AND FS.id>FS2.id )" + 
        " THEN FS2.PA49_Debut "+
          " ELSE (FS.PA49_Actuel) "
        + "END" )
        void setPA49Debut(); ```

这些是我的ISmodel和FSmodel实体

@Entity
public class FSmodel {
      @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;
    public String Partnumber;
    public String Materialgroup;
    public String Warehouse;
    public Float Value;
    public Float Stock;
    public Float PA49_Actuel;
    public Float PA49_Debut;
    public String article_fg;
    public Float Priceperunit;}


@Entity
public class ISmodel {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;
    public String Partnumber;
    public String Materialgroup;
    public String Warehouse;
    public Float Stock;
    public Float Value;
    public Float  PA49;
    public Float STPA49; }

这就是错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'controller': Unsatisfied dependency expressed through field 'FSrepos'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'FSrepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract void com.example.demo2.repository.FSrepository.setPA49Debut()!
Caused by: java.lang.NullPointerException: null

任何帮助将不胜感激。谢谢。

sql spring-boot jpa
1个回答
0
投票

NullPointerException: null的解决方案是

尝试@Query(vaue =“您的查询在这里”,nativeQuery = true)

如@stacker所说,但我发现我的代码中有很多错误,我将尽力解释它们,以希望对其他人有所帮助。首先是存在的拼写第二个是在选择语句中使用SI,我通过添加新的选择语句解决了此问题。第三个错误是通过对这些行中的同一张表进行子查询来更新我的表"WHEN EXISTS (SELECT 1 FROM FSmodel FS2 WHERE FS.Partnumber=FS2.Partnumber AND FS.id>FS2.id )" + " THEN FS2.PA49_Debut "我找到了解决方案以及解释here最后,这是我的最终代码,效果很好@Transactional @Modifying @Query(value="Update FSmodel FS Set FS.PA49_Debut = CASE" + " WHEN exists(SELECT SI.Partnumber FROM ISmodel SI where FS.Partnumber=SI.Partnumber)" + " THEN (select distinct S.PA49 from ISmodel S where FS.Partnumber=S.Partnumber)" + "WHEN exists(SELECT 1 FroM (SELECT * FROM FSmodel) AS FSd WHERE FS.Partnumber=FSd.Partnumber AND FS.id>FSd.id )" + " THEN (select distinct F.PA49_Debut from (SELECT * FROM FSmodel) AS F where FS.Partnumber=F.Partnumber AND FS.id>F.id)+1" + " ELSE (FS.PA49_Actuel )" + "END",nativeQuery = true) void setPA49Debut();

© www.soinside.com 2019 - 2024. All rights reserved.