Почему класс сущностей в JPA не может быть окончательным? - PullRequest
24 голосов
/ 13 августа 2010

Почему класс сущностей в JPA не может быть финальным или иметь финальные методы?Цитировать с здесь -

Класс сущности должен соответствовать следующим требованиям:

...

Класс не должен быть объявлен final.Никакие методы или постоянные переменные экземпляра не должны быть объявлены final.

В чем причина?Является ли JPA подклассами классов сущностей и переопределяет методы?

Ответы [ 2 ]

28 голосов
/ 13 августа 2010

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

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

Конечно, есть гораздо больше причин, чем просто, вот статья 1006 *, которая дает больше информации о том, как ORM в целом работает за обложками, что может помочь вам лучше понять другие требования для JPA лиц.

0 голосов
/ 06 апреля 2018

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

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