2012-09-24 18 views
9

Necesito saber si es posible agregar algunos atributos y comportamientos a alguna entidad POJO JPA (usando hibernate proveedor) extendiéndolo, y luego hacer que entityManager devuelva objetos extendidos en su lugar entitys de poco POJO, como los siguientes ejemplos:Extender entidad JPA para agregar atributos y lógica

POJO APP Entidad Clase

@Entity 
@Table("test") 
public class Test implements Serializable { 
} 

clase extendida

public class ExtendedTest extends Test { 
... 
} 

Captación de objetos extendidos de Clase

List<ExtendedTest> extendedList = entityManager.createNamedQuery("ExtendedTest.findByFoo").setParameter("foo", "bar").getResultList(); 

La otra manera es posible que estoy evaluar se extiende funcionalidad con una entidad compuesta y delegar todos los setters y getters, pero esto podría significar un montón de trabajo con enormes tablas:

public class ExtendedTest2 { 
    private Test test; 

    public ExtendedTest2(Test test) { 
     this.test = test; 
    } 

    public getFoo() { 
     return test.getFoo(); 
    } 

    public getBar() { 
     return test.getBar(); 
    } 

    ... 
} 

Cualquier sugerencia será muy apreciada.

+0

No creo que es posible a medida que felizmente puede poner su lógica y otros atributos de la clase de entidad. – dcernahoschi

+0

De hecho, puedo agregar otros atributos y lógica a mi clase de entidad pero no "felizmente", mi idea es mantener entidades como POJO y mantener solo los atributos de representación de tabla, de hecho, es precisamente por eso que creo esta pregunta en primer lugar. – jmoreira

Respuesta

16

Usando @Inheritance

@Entity 
@Table(name="TEST") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public class Test { 
    ... 
} 

@Entity 
public class ExtendedTest 
    extends Test { 
    ... 
} 

o @MappedSuperclass

@MappedSuperclass 
public class Test { 
    ... 
} 

@Entity 
public class ExtendedTest 
    extends Test { 
    ... 
} 
+3

Solo si alguien hace esto, identifique si es incorrecto o porque la versión (JPA 2.1, enlace de eclipse), pero tuve que agregar la anotación '@Inheritance (strategy = InheritanceType.SINGLE_TABLE)' en la clase secundaria, no en la primaria – rekiem87

+2

Solo como referencia: al usar '@ Entity' en una clase abstracta, y cada entidad derivada debe crear su propia tabla, en este caso debe usar' @Inheritance (strategy = InheritanceType.TABLE_PER_CLASS) 'en la tabla * abstract parent * ! – membersound

Cuestiones relacionadas