2012-09-13 22 views
5

私はHibernateを初めて使用しています。私はstudentphone numberのような2つのテーブルを持っており、これらの2つのテーブルは共通のカラムstudent idを持っています。 Hibernate hqlを使用してこれらの2つのテーブルで内部結合を行いたいとします。そのHibernateのような二つのクラスではhqlを使用したHibernate内部結合

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; 
} 

答えて

6

the documentationを再度読んでください。あなたはPhoneエンティティに学生のIDを持っていないはずです。むしろ、あなたは両方のエンティティ間の関連性を持っていることになっている:電話は学生に属し:

public class Phone { 
    @Id 
    private Integer id; 

    private String phoneNumber; 

    @ManyToOne 
    private Student owner; 
} 

だけにしてあなたが使用することができるようになりますが加わり:

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

OK thanks..how? ? –

+0

もちろん、次のことができます:phone.owner.school.country.name = 'USA'など。これはHibernateの優れたドキュメントで説明されています。それを読んで。 –

+0

okありがとうございました。私たちは、休止状態で多対多の関係のクエリ結果をどのように反復することができますか。私はたくさん試してみます。しかし、私はそれを達成できません。 –

3

生活が困難に協会を認識しません。通常の方法は、電話クラスのsidを実際のStudentオブジェクトにすることです。これにより、休止状態になっていることが認識されます。例えば

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

これを実行すると、単純なHQL結合などを行うことができます。また

FROM Phone p 
JOIN p.student s 

あなたがオブジェクト内の生のIDをしたい何らかの理由がある場合、あなたは使用することができますが、明示的に通常のSQLのような関連付けが参加指定場所「シータに参加します」。例えば。

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

HQLの下に見つけてください。 :

SELECT * FROM学生ST INNER JOINはPHONENUMBER PN ON ST.id = PN.idをどこST.Name =私は2つのテーブルよりも、同じことを実行しますすることができます 'XXXX'

+0

このエラーが発生しました。 hibernate.hql.ast.QuerySyntaxException:予期しないトークン:1行目、91列目のON – kozla13

関連する問題