Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это 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 .
Изменение значений класса сущности путем отражения будет чревато проблемами. Это связано с тем, что вы имеете дело с классом, который является постоянным, и поэтому API-интерфейс persistence должен знать об изменениях в полях.
Если вы вносите изменения через отражение, скорее всего, API-интерфейс persistence API не будет знать о эти изменения.
Лучшим решением было бы назвать сеттеры через отражение.
Ваш класс может быть задействован, а сеттеры, ответственные за запись изменений, будут меняться. Я не знаком с EclipseLink, чтобы проверить, является ли класс, возвращаемый myDao.getEntity(id);
, вашим фактическим классом подкласса, сгенерированного EclipseLink.
Я уверен, что сущность, которую вы даете в своей структуре персистентности, фактически завернута в другой класс (возможно, то же самое с материалом, наложенным на отражение). Изменение поля непосредственно через отражение кажется маловероятным. Вы можете проверить, есть ли (сгенерированный) сеттер, который вы можете использовать. Хотя, если вы идете по этому маршруту, можно спросить, почему вы не разрешаете вызывающим абонентам напрямую звонить сеттеру?