java - principales - Diferencia de rendimiento entre campos anotadores o métodos getter en Hibernate/JPA
spring java hibernate (3)
ok, no puedo dar números jaja, pero supongo que acceder a los campos a través de la reflexión no sería una cosa de ''una vez''. Cada objeto tiene sus propios miembros privados.
Honestamente, no sé mucho sobre la reflexión, pero los getter / setters deberían ser directos. De hecho, puede intentar configurar uno de los métodos como privado y creo que no funcionará porque no puede encontrar el método que necesita.
Existen otros problemas, como los proxies, que afectarán a los métodos getter, dependiendo de cómo cargues tus entidades.
Esto es todo lo que veo en la documentación:
El atributo de acceso le permite controlar cómo Hibernate accederá a la propiedad en tiempo de ejecución. Por defecto, Hibernate llamará a la propiedad get / set pair. Si especifica access = "field", Hibernate omitirá el par get / set y accederá directamente al campo, utilizando reflection. Puede especificar su propia estrategia para el acceso a propiedades nombrando una clase que implemente la interfaz org.hibernate.property.PropertyAccessor.
Mi suposición es que el reflejo en general va a ser un costo más alto, pero lo siento ... no hay números :(
Tenía curiosidad por saber si alguien tenía algún número difícil sobre la diferencia de rendimiento entre las entidades anotadoras que usan campos privados en lugar de los métodos getter públicos. He oído a la gente decir que los campos son más lentos porque se llaman "a través de la reflexión", pero también lo son los métodos getter, ¿no? Hibernate necesita establecer la accesibilidad del campo en verdadero antes de que intente leerlo, lo que puedo ver teniendo una ligera sobrecarga. Sin embargo, ¿no se haría eso en el nivel de clase en el ámbito de una sesión o quizás solo una vez cuando se lea la configuración y se genere SessionFactory?
Solo curiosidad por si esto es un mito o si realmente hay verdad en él; Personalmente, me parece que anotar los campos es un poco más legible.
Cargó 5000 registros en una tabla simple de 3 columnas. Asignamos dos clases a esa tabla, una que usa campos privados anotados y otra que usa getters públicos anotados. Ejecuta 30 ejecuciones de HibernateTemplate.loadAll () de Spring seguido de HibernateTemplate.clear () para purgar el caché de sesión. Resultados en ms a continuación ...
Total de métodos: 6510, promedio: 217
total de campos: 6586, promedio: 219
Probablemente debería darle otra puñalada después de agregar más propiedades a cada clase, pero en este momento la diferencia no parece ser estadísticamente significativa.
Generalmente use la anotación en la parte superior de los métodos captadores, porque cuando la clase se carga en JVM ath ese modelo de hibernación o clase de entidad también se carga, si usa la anotación anterior de campo o peroperty, se ejecutará solo una vez al momento de cada solicitud. mientras que si coloca encima getter luego en reflaction o cualquier otra capa cuando calificará esta clase, entonces el método de getter se llamará entonces esto se volverá muy útil