query namedquery manager example ejemplos create consultas java jpa

java - namedquery - jpa query example



¿Por qué la clase de entidad en JPA no puede ser definitiva? (2)

¿Por qué una clase de entidad en JPA no puede ser final o tener un método final? Citando desde here -

Una clase de entidad debe cumplir estos requisitos:

...

La clase no debe ser declarada final . Ningún método o variable de instancia persistente debe declararse final .

¿Cual es la razon? ¿JPA está subclasificando las clases de entidad y redefiniendo los métodos?


Por definición, una entidad es una clase que puede persistir en una base de datos, por lo que tener un campo final no tendría sentido en el contexto de algo que terminará siendo un registro en su base de datos. El requisito de que no haya una clase final y ningún método final tiene que ver con la forma en que las implementaciones de JPA realmente tratan con las instancias persistentes de las clases de sus entidades.

Es común que las implementaciones subclasifiquen su clase en el tiempo de ejecución y / o agreguen código de bytes dinámicamente a sus clases, con el fin de detectar cuándo se ha producido un cambio en un objeto de entidad. Si su clase se declara como final, entonces eso no sería posible.

Por supuesto, hay muchas más razones que esas, aquí hay un article que brinda más información sobre cómo el ORM en general funciona detrás de las coberturas, que podría ayudarlo a comprender mejor los otros requisitos para las entidades de JPA.


Porque los proveedores de persistencia hacen proxies de objetos. Estos proxies están creando subclases de tiempo de ejecución de las entidades / clases y también podrían estar agregando algunos indicadores para identificar si hay un cambio en los datos. entonces esa es la razón por la cual su clase no debe ser definitiva para poder cambiarla.