2012-09-13 14 views
5

Jestem nowy w Hibernate. Mam dwie tabele, np. student i phone number, a te dwie tabele mają wspólną kolumnę, student id. Chcę wykonać sprzężenie wewnętrzne za pomocą tych dwóch tabel przy użyciu Hibernate hql.Hibernowanie sprzężenia wewnętrznego przy użyciu 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; 
} 

Odpowiedz

6

Przeczytaj ponownie the documentation. Nie powinieneś mieć identyfikatora ucznia w encji Telefon. Raczej jesteś ma mieć powiązanie pomiędzy obydwoma podmiotami: Telefon należy do studenta:

public class Phone { 
    @Id 
    private Integer id; 

    private String phoneNumber; 

    @ManyToOne 
    private Student owner; 
} 

Dopiero wtedy będzie można korzystać z łączy:

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

ok thanks..how mogę wykona to samo więcej niż dwóch tabel? ? –

+0

Oczywiście możesz: gdzie phone.owner.school.country.name = 'USA' na przykład. Zostało to wyjaśnione w doskonałej dokumentacji Hibernate. Przeczytaj to. –

+0

ok dzięki .. następnie jak możemy iterować wyniki zapytania dla wielu do wielu relacji w hibernacji .. Będę próbował dużo.Ale nie mogę go osiągnąć. –

3

Z dwóch klas tak hibernacji jest nieświadomy stowarzyszenia sprawia, że ​​życie trudne. To, co normalne, to uczynić sid w klasie telefonicznej rzeczywistym obiektem Studenta, więc hibernacja jest świadoma powiązania. na przykład

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

po wykonaniu tej czynności można wykonać proste połączenie HQL, np.

FROM Phone p 
JOIN p.student s 

Ewentualnie czy istnieje jakiś powód, dla którego chcesz surowy ID w obiekcie następnie można użyć „theta join”, gdzie wyraźnie określić związek jak normalny SQL JOIN. Na przykład.

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

Poniżej znajduje HQL :

SELECT * FROM studenta ST INNER JOIN phonenumber PN ON ST.id = PN.id gdzie ST.Name = 'xxxx'

+0

Mam ten błąd: org. hibernate.hql.ast.QuerySyntaxException: nieoczekiwany token: WŁ. w pobliżu wiersza 1, kolumna 91 – kozla13

Powiązane problemy