2010-06-11 22 views
7

Estoy usando anotaciones de hibernación. ¿Cómo agregar métodos al objeto POJO? Por ejemplo, tengo el método "getChildNodes", asociado a la base de datos, pero también quiero agregar el método recursivo "getAllChildNodes". Obtengo la excepción "org.hibernate.PropertyNotFoundException: no se pudo encontrar un setter para el progreso de la propiedad en clase" cuando lo hago.Java, Anotaciones de Hibernate, ¿Cómo agregar métodos al objeto POJO?

+0

muestra tu código. – Bozho

Respuesta

9

Si interpreto esto como "¿Cómo puedo añadir un método que no está relacionado con la persistencia", entonces es necesario utilizar la anotación @Transient en el método getAllChildNodes()

+0

Estoy confundido. ¿No agrega más funcionalidades adicionales como getAllChildNodes(), o publish(), por ejemplo, que ya no sea un POJO? ¿Y por lo tanto viola un principio de diseño de los objetos de hibernación que tienen que ser POJO y, por lo tanto, es "malo"? Pero, ¿por qué sería malo? Quiero hacer esto, pero no estoy seguro si es el camino correcto. – pete

-1

Abra el archivo .java y escriba un método denominado getAllChildNodes().

Hibernate no escribe el código para usted, asigna los campos de su base de datos a su código. Eso es todo. Si desea tener una lógica adicional en las clases de su dominio/modelo además de los get y setters normales para sus propiedades, tendrá que agregarlas usted mismo.

1

Hay dos maneras de definir la estructura de su entidad .

  • utilizando anotaciones sobre las variables de instancia de su entidad o
  • utilizando anotaciones sobre los métodos de acceso de su entidad

Al utilizar las anotaciones en los métodos getter, Hibernate asume que cada getXXX (y isXxx para tipos booleanos) representa la definición de una propiedad persistente. Y esto se mantiene incluso si ese getter particular no contiene ninguna anotación, como sucede en su caso.

Hibernate también espera encontrar un método de configuración coincidente para cada propiedad persistente. Y en su caso eso es lo que falta y causa la excepción.

Puede resolver este problema declarando su getter personalizado como @Transient que dice que este getter no representa una propiedad persistente. Otra forma sería convertir la entidad para usar anotaciones en las variables de instancia. Este último sería mi elección personal.

Cuestiones relacionadas