java .lang.NullPointerException при попытке обновить sql таблицу - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь обновить столбец «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

Любая помощь будет принята с благодарностью. Благодаря.

1 Ответ

0 голосов
/ 07 марта 2020

решение для NullPointerException: null состоит в

try @Query (vaue = "ваш запрос идет здесь", nativeQuery = true)

, как сказал @stacker но я обнаружил, что в моем коде много ошибок, я постараюсь объяснить их в надежде, что это поможет кому-то еще. Первый

СЛУЧАЙ, КОТОРЫЙ СУЩЕСТВУЕТ, записан неправильно. Должно быть написано CASE WHEN EXISTS @ alex

Второй - использование SI из оператора select. Я решил эту проблему, добавив новый оператор select. Третья ошибка - обновить мою таблицу, выполнив подзапрос той же таблицы в этих строках "WHEN EXISTS (SELECT 1 FROM FSmodel FS2 WHERE FS.Partnumber=FS2.Partnumber AND FS.id>FS2.id )" + " THEN FS2.PA49_Debut ", и я нашел решение, а также объяснение здесь В конце концов это мой окончательный код, и он прекрасно работает @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();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...