Pregunta

Tenemos algunos métodos captadores de Hibernate con anotada tanto @Column y @Basic.

obtener una excepción si no tenemos la incubadora correspondiente. ¿Por qué es esto?

En nuestro caso estamos derivando el valor devuelto por el comprador (para ser almacenada en la base de datos) y el colocador no tiene ningún propósito funcional. Así que sólo tenemos un método vacío para moverse por la condición de error ..

¿Fue útil?

Solución

Como otros han mencionado, si usted anotar un método getter de la propiedad, entonces Hibernate usa la incubadora al leer los valores de la base de datos. Básicamente, Hibernate asume que todo lo que se está escribiendo en la base de datos eventualmente la necesidad de ser leído de la base de datos. Esto implica que si anotar un captador, entonces tiene que llamar a un colocador al leer el objeto de la base de datos.

Puede hacer que el colocador privada (Hibernate utilizar la reflexión para acceder a la incubadora). Esta es una gran manera de preservar el contrato de la clase sin dejar de utilizar Hibernate para el mapeo relacional.

Si el campo se deriva de otras propiedades en la clase, entonces ¿por qué se almacena en la base de datos? Se puede utilizar el @Transient anotación para marcar el campo que no se debe almacenar en la base de datos. Incluso puede utilizar la @Formula anotación tener Hibernate derivar el campo para usted (lo hace mediante el uso de la fórmula de la consulta se envía a la base de datos).

Otros consejos

Se debe anotar sus clases con el @Entity(access = AccessType.FIELD) y anotar sus atributos. Esto debería solucionar tu problema. El colocador es la mejor manera de refactorización apoyo. Y ¿cuál es el problema de tener el pequeño colocador allí.

Set access="field" si no desea utilizar los emisores:

<class name="com.demo.hibernate.Country" table="country">
  <id name="countryId" column="id" type="int">
    <generator class="increment" />
  </id>
  <property name="name" column="name" access="field" type="string" />
  <property name="countryCode" column="country_code" access="field" type="string" />
</class>

Hibernate utiliza el método set para inicializar la entidad que usted está leyendo desde su base de datos.

Tal vez, si haces modificadores de acceso de campos de entidad default o protected o public, entonces Hibernate inicializar los campos directamente sin utilizar colocador (he leído algo al respecto, pero no estoy seguro de que funcione). Pero el uso de la moda es mucho más preferidas.

Si usted no utiliza los emisores y utilizar atributos particulares, Hibernate tendría que recuperar los campos de reflexión y hacer field.setAccessible (verdadero). No creo que Hibernate hace eso.

Yo realmente no sé si podemos decirle a Hibernate para hacer eso, pero por lo que recuerdo, configuración por defecto está utilizando fijadores ... Ponga un registro / sysout en un conjunto y verá que utiliza colocador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top