2017-02-08 5 views
2

多対1の関係を持つ2つのテーブルがありますが、それらには外部キーはありません。 Student同様 が多く、Teacherは一つであり、例えばspring jpa hibernate create多対1以外の外部キーを持たないエンティティ

エンティティ:私は学生を照会する場合

@Entity 
@Table(name = "student") 
class Student { 


    @Column(name = "TeacherName") 
    private String teacherName; 

    @ManyToOne 
    private Teacher teacher 
} 


@Entity 
@Table(name = "teacher") 
class Teacher { 

private String name; 
} 

、SQLは次のとおりです。

select * from Student as st INNER JOIN Teacher as tcr ON st.TeacherName = tcr.name; 

私が見つかりました。 @ManyToOneは機能しません。外部キーが必要なようです。テーブルはそのように提供することはできません。

エンティティの設定方法を教えてもらえますか?

+1

このためにHibernateクエリが必要ですか? – Akshay

+0

回答を確認してください@yang yang – ozgur

+0

なぜあなたは答えをチェックしませんか? – ozgur

答えて

1

あなたは次のようなマッピングを使用する必要があります:HQLで次に

public class Teacher { 

    @OneToMany(mappedBy = "teacher") 
    private Set<Student> students; 

    @Column(name = "name") 
    private String name; 
} 

public class Student { 
    @ManyToOne 
    @JoinColumn(name = "teacherName", referencedColumnName = "name") 
    private Teacher teacher; 

} 

:また

select s from Student s INNER JOIN s.teacher t where t.name = :name 

あなたの現在のマッピングに滞在したいと、あなたがする必要がある場合をhqlの '古い'スタイルの結合を使用して、非外部キー列による結合を実現します。

select s from Student s, Teacher t where t.name = s.teacherName and t.name = :name 
+0

ありがとうございました。他のより重要な仕事が私をブロックして以来、後半のコメントをおかけして申し訳ありません。 –

関連する問題