2017-02-08 8 views
2

У меня есть две таблицы, в которых есть отношение «несколько к одному», но у них нет внешнего ключа. Как Student много, и Teacher это один,как пружина jpa hibernate create Entity, которая имеет много к одному, но без внешнего ключа

сущности, например:

@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

Вы должны использовать следующее отображение:

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; 

} 

Тогда в HQL:

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

большое спасибо. извините за поздний комментарий, так как другие более важные работы меня блокируют. –