5

私はHibernateを初めて使用します。たとえば、 2つのテーブルがstudentありphone number、これら2つのテーブルには共通の列がありstudent idます。Hibernate hqlを使用して、これら2つのテーブルで内部結合を実行したいと思います。

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

3 に答える 3

6

ドキュメントをもう一度お読みください。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'
于 2012-09-13T10:15:46.680 に答える
3

そのような2つのクラスでは、冬眠は人生を困難にする関連性に気づいていません。通常は、電話クラスのsidを実際のStudentオブジェクトにして、Hibernateが関連付けを認識できるようにします。例えば

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
于 2012-09-13T10:15:14.460 に答える
-3

HQLの下にあります:

SELECT*FROM学生STINNERJOIN電話番号PNONST.id = PN.idここで、ST.Name ='XXXX'

于 2012-09-13T10:28:15.477 に答える