2010-02-03 16 views
14

Tengo una serie de superclases abstractas de las cuales mi clase concreta hereda varios métodos. Algunos de estos métodos necesitan tener anotaciones JPA o JAXB colocadas sobre ellos en la clase concreta. Actualmente lo hago a través de lo siguiente:La mejor manera de agregar anotaciones a métodos heredados

@MyLocalAnnotations 
@Override 
public method inheritedMethodHere (yadda yadda) 
    { 
    super.inheritedMethodHere(yadda yadda); 
    } 

¿Hay alguna manera de hacerlo sin anular el método? Parece un desperdicio anular un método solo para proporcionar anotaciones locales.

+0

También quería agregar que la razón por la que necesitaba crear anotaciones en las subclases concretas en primer lugar era porque usan diferentes nombres de tablas en JPA y nombres de elementos en JAXB. La superclase en este caso también es genérica. – HDave

Respuesta

9

Lamentablemente, no hay una mejor manera de lo que está haciendo ahora. Para hacer lo que está describiendo, tendrá que anular el método, teniendo en cuenta que su anotación JPA necesitará información específica para la clase concreta.

Con las anotaciones JPA, en realidad tiene dos opciones: puede anotar los métodos o puede anotar las propiedades. En nuestro proyecto, hemos estandarizado las propiedades de las anotaciones en lugar de los métodos, pero tampoco le servirá de nada, ya que las propiedades son presumiblemente parte de la clase concreta. (Si de alguna manera se comparten en la superclase, REALMENTE necesitará anotar los métodos y anularlos).

Es difícil hacer una recomendación sin ver su esquema, pero si sus clases de entidad tienen tanto en común que comparten muchas propiedades en la superclase, ¿podrían simplemente almacenarse en la misma tabla, quizás con un columna de tipo diferenciador?

O, como alternativa, si son no casi idénticos, ¿podría reproducir las propiedades comunes en cada clase concreta? Es posible que esté causando más trabajo en lugar de ahorrarse tratando de capturar las propiedades comunes en la súper clase. Ya que tendrá que anotarlos individualmente en las clases concretas, solo debe declararlos en las clases concretas. Si necesita métodos comunes que interactúen con estas propiedades, una clase de utilidad separada para capturar esas funciones podría ser la respuesta.

En nuestro proyecto, A veces utilizamos una superclase común para entidades, pero captura algunos metadatos sobre la entidad, nada que impacte la lógica de persistencia. Por lo tanto, no se necesitan anotaciones JPA (ni tendrían sentido) en la clase abstracta.

+0

Gracias por esta respuesta bien pensada. En mi caso, las clases de entidad son 50% similares y 50% diferentes !! Continuaré usando tablas separadas para el rendimiento y continuaré usando el enfoque anterior. También anoto los métodos de acceso como a veces (no a menudo) tenemos lógica en ellos. – HDave

Cuestiones relacionadas