2010-08-12 14 views
23

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

clase Una entidad debe cumplir los siguientes requisitos:

...

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

¿Cuál es el motivo? ¿JPA está subclasificando las clases de entidad y redefiniendo los métodos?

+0

Pregunta similar [Proveedor de persistencia para Java que admite campos finales] (http://stackoverflow.com/questions/2455906/persistence-provider-for-java-that-supports-final-fields). –

Respuesta

27

Por definición, una entidad es una clase que puede conservarse 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 tiempo de ejecución y/o agreguen código de bytes dinámicamente a sus clases, para detectar cuándo ha ocurrido 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 funciona el ORM detrás de las cubiertas, que podría ayudarlo a comprender mejor los otros requisitos para las entidades JPA.

+0

¡Gracias! Sabía sobre los campos finales, pero no estaba seguro acerca de los métodos/clases finales. –

+0

De nada;) –

+4

Tenga en cuenta que * cargar * clases inmutables desde una base de datos tiene perfecto sentido. –

Cuestiones relacionadas