2012-05-03 8 views
5

Vamos tengo tablaAsignación de dos clases en la tabla individual

USUARIO
-id: larga
-login: varchar
-weapon: varchar
-Magic: varchar

Y quiero asignar esta Tabla a dos clases (usando Hibernate/JPA)

class Mag 
{ 
    long id; 
    String login; 
    String weapon; 
} 

y

class Warrior 
{ 
    long id; 
    String login; 
    String magic; 
} 

Y si envío consulta HQL: SELECT m FROM Mag m WHERE m.login = ? en cuando me siento ejemplo Mag
y si envío HQL consulta: SELECT w FROM Warrior w WHERE w.login = ? en cuando me siento Guerrero ejemplo
que intento hacer algo como esto

@Entity 
@Table(name = "User") 
class User 
{ 
    long id; 
    String login; 
} 

@Entity 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
class Warrior extends User 
{ 
    String weapon; 
} 

Pero la columna del discriminador requirió @Intermitance, pero no tengo discriminator.

Respuesta

8

Está buscando MappedSuperClass, que permite que las subclases hereden las anotaciones de la superclase sin necesidad de un discriminador.

2

Puede usar Discriminator para esto, si tiene una columna delimitadora. Usted asume deliminator columna es

carbón uType (1)

Y si

uType = m, es una entidad Mag y

uType = w, es decir Entidad guerrera

Encuentra el código de abajo.

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "utype", discriminatorType = DiscriminatorType.CHAR) 
@Table(name = "User") 
class User 
{ 
    long id; 
    String login; 
} 

@Entity 
@DiscriminatorValue("m") 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
@DiscriminatorValue("w") 
class Warrior extends User 
{ 
    String weapon; 
} 
Cuestiones relacionadas