Spring data jpa update (save) wont 'update entity [duplicate]

Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.

Например:

string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)

if (testString.Length == 0) // Throws a nullreferenceexception
{
    //Do something
} 

Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.

По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит

Дополнительная информация находится в C # NullReferenceException и Null Parameter .

3
задан tputkonen 7 July 2009 в 13:51
поделиться

3 ответа

Изменение значений класса сущности путем отражения будет чревато проблемами. Это связано с тем, что вы имеете дело с классом, который является постоянным, и поэтому API-интерфейс persistence должен знать об изменениях в полях.

Если вы вносите изменения через отражение, скорее всего, API-интерфейс persistence API не будет знать о эти изменения.

Лучшим решением было бы назвать сеттеры через отражение.

5
ответ дан Michael Wiles 3 September 2018 в 09:01
поделиться
  • 1
    Спасибо, теперь это работает. Я размышляю о сеттерах и геттерах. Я думаю, что исходный код сломался, когда было включено статическое ткачество EclipseLink, потому что я уверен, что манипулирую полями, которые были непосредственно использованы для работы. Однако все хорошо. – tputkonen 8 July 2009 в 11:21

Ваш класс может быть задействован, а сеттеры, ответственные за запись изменений, будут меняться. Я не знаком с EclipseLink, чтобы проверить, является ли класс, возвращаемый myDao.getEntity(id);, вашим фактическим классом подкласса, сгенерированного EclipseLink.

0
ответ дан Robert Munteanu 3 September 2018 в 09:01
поделиться

Я уверен, что сущность, которую вы даете в своей структуре персистентности, фактически завернута в другой класс (возможно, то же самое с материалом, наложенным на отражение). Изменение поля непосредственно через отражение кажется маловероятным. Вы можете проверить, есть ли (сгенерированный) сеттер, который вы можете использовать. Хотя, если вы идете по этому маршруту, можно спросить, почему вы не разрешаете вызывающим абонентам напрямую звонить сеттеру?

1
ответ дан wds 3 September 2018 в 09:01
поделиться
  • 1
    Хороший вопрос! Причина в том, что я пытаюсь сравнивать и обновлять свои сущности, используя что-то вроде ответа, принятого на этом: stackoverflow.com/questions/867442/… – tputkonen 7 July 2009 в 16:10
  • 2
    Я не уверен, что ваш дизайн очень нормальный, но если EclipseLink модифицирует класс и добавляет сеттеры, это должно быть тривиально, чтобы найти их, поскольку они, вероятно, будут следовать соглашениям POJO (setter for field is setField ()) – wds 8 July 2009 в 09:32
  • 3
    Смотрите комментарий к Michael – tputkonen 8 July 2009 в 11:20
Другие вопросы по тегам:

Похожие вопросы: