2012-09-13 13 views
5

Soy nuevo en Hibernate. Tengo dos tablas, por ejemplo, student y phone number y estas dos tablas tienen una columna común, student id. Quiero hacer una combinación interna con estas dos tablas usando Hibernate hql.Hibernate combinación interna usando hql

student.java

{ 
    private int id; 
    private String name; 
} 

phone.java

{ 
    private int pid; 
    private int sid; //same id in student.java 
    private int phone_number; 
} 

Respuesta

6

Lee the documentation again. Se supone que no debes tener la identificación del estudiante en la entidad de teléfono. Más bien, se supone que debes tener una asociación entre ambas entidades: un teléfono pertenece a un estudiante:

public class Phone { 
    @Id 
    private Integer id; 

    private String phoneNumber; 

    @ManyToOne 
    private Student owner; 
} 

Sólo entonces se podrá usar combinaciones:

// selects all the phones belonging to the students named 'John' 
select phone from Phone phone where phone.owner.name = 'John' 
+0

thanks..how ok 'XXXX' puedo voy a realizar la misma cosa más de dos tablas? ? –

+0

Por supuesto que puede: donde phone.owner.school.country.name = 'USA', por ejemplo. Esto se explica en la excelente documentación de Hibernate. Léelo. –

+0

ok gracias ... ¿cómo podemos iterar los resultados de la consulta para muchas relaciones en hibernación ... Lo intentaré mucho, pero no puedo lograrlo. –

3

Con las dos clases como la hibernación no es consciente de la asociación que hace la vida más difícil. Lo que sería normal es hacer que el sid en la clase telefónica sea un objeto real de Student, de modo que hibernate tenga conocimiento de la asociación. p.ej.

class Phone { 
    @ManyToOne 
    @Column(name = "sid") 
    private Student student; 
} 

habiendo hecho esto, a continuación, puede hacer una simple unión HQL p. Ej.

FROM Phone p 
JOIN p.student s 

Alternativamente, si hay alguna razón desea que el ID prima en el objeto a continuación, se puede utilizar una "teta unirse a" donde se especifica explícitamente la asociación como un SQL normales Unir. P.ej.

FROM Phone p, Student s 
WHERE p.sid = s.id 
-3

A continuación el HQL : ÚNETE

SELECT * FROM estudiante ST INTERIOR numero de teléfono PN eN ST.id = PN.id donde ST.Name =

+0

Estoy obteniendo este error: org. hibernate.hql.ast.QuerySyntaxException: token inesperado: ON cerca de la línea 1, columna 91 – kozla13

Cuestiones relacionadas