У меня проблема с попыткой получить элементы из моей базы данных с помощью HQL. У меня есть 2 таблицы (студент и класс), и я хочу получить всех учеников вместе с классом, в котором они принадлежат.Проблема с запросом HQL
Student стол
user_id | name | nick | password | surname | classroom_id
---------|-----------|-----------|-----------|-----------|--------------
2 | AAA | studentA | test123 | AAA | 1
3 | BBB | studentB | test321 | BBB | 1
Классная стол
classroom_id | name | year
--------------|------------|----------
1 | TestClass | 2016/2017
Вот таблицы как Java классов в случае, если кто хочет, чтобы их увидеть.
Student
@Entity
public class Student extends User{
private Class studentClass;
public Student() {
}
public Student(String name, String surname, String nick, String password, Class studentClass) {
super(name, surname, nick, password);
this.studentClass = studentClass;
}
@ManyToOne
@JoinColumn(name = "classroom_id")
public Class getStudentClass() {
return studentClass;
}
public void setStudentClass(Class studentClass) {
this.studentClass = studentClass;
}
}
Класс
@Entity
public class Classroom {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty year = new SimpleStringProperty();
private int classroom_id;
public Classroom() {
}
public Classroom(String name, String year) {
this.name.set(name);
this.year.set(year);
}
@Column(nullable = false)
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
@Column(nullable = false)
public String getYear() {
return year.get();
}
public SimpleStringProperty yearProperty() {
return year;
}
public void setYear(String year) {
this.year.set(year);
}
@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getClassroom_id() {
return classroom_id;
}
public void setClassroom_id(int classroom_id) {
this.classroom_id = classroom_id;
}
Теперь здесь является метод с запросом я пытаюсь использовать, чтобы получить детали. Я получаю исключение, когда пытаюсь вызвать этот метод.
public List<Object> getAllStudentsWithClass(){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();
String select = "SELECT student, classroom FROM Student student, Classroom classroom WHERE student.classroom_id = classroomm.classroom_id";
Query query = session.createQuery(select);
List<Object> list = query.list();
return list;
}
Вот исключение, которое я получаю.
Exception in thread "JavaFX Application Thread" org.hibernate.QueryException: could not resolve property: classroom_id of: model.Student [SELECT student, classroom FROM model.Student student, model.Classroom classroom WHERE student.classroom_id = classroomm.classroom_id]
Caused by: org.hibernate.QueryException: could not resolve property: classroom_id of: model.Student
Я ценю все ответы и идеи, спасибо.
Спасибо, запрос работает. –
Могу ли я задать еще один вопрос? Как выглядел бы запрос, если бы я хотел выбрать только студентов с определенным классом (на основе id)? Я думал снова использовать «где», но это, вероятно, не сработает. –
Выберите студент из Студент-студент Присоединиться к Fetch student.classroom c Где c.id = 'wanted id' – aviad