Подскажите пожалуйста, какой синтаксис у HQL запроса, который возвращал бы объекты из базы, при определённом условии.
List<Answer> answers = HibernateSessionFactoryUtil.getSessionFactory().openSession()
.createQuery("From com.quiz2.models.Answer answ WHERE answ.question_id = " + :id).list();
return answers;
Код на снимке:
То есть, я хочу вывести все Answers, которые связаны с определённым Question (один question ко многим answers).
Класс ответов:
package com.quiz2.models;
import javax.persistence.*;
@Entity
@Table(name = "answers")
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "text_answer")
private String text_answer;
@Column(name = "correct")
private boolean correct;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;
public Answer() {
}
public Answer(String text_answer) {
this.text_answer = text_answer;
}
public int getId() {
return id;
}
public String getText_answer() {
return text_answer;
}
public void setText_answer(String text_answer) {
this.text_answer = text_answer;
}
public boolean isCorrect() {
return correct;
}
public void setCorrect(boolean correct) {
this.correct = correct;
}
public Question getQuestion() {
return question;
}
public void setQuestion(Question question) {
this.question = question;
}
@Override
public String toString() {
return "ID " + getId() + " Answer " + getText_answer() + " correct: " + isCorrect();
}
}
Класс вопросов:
package com.quiz2.models;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "questions")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "text_question")
private String text_question;
@Column(name = "score")
private int score;
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Answer> answers;
public Question() {
}
public Question(String text_question, int score) {
this.text_question = text_question;
this.score = score;
this.answers = new ArrayList<Answer>();
}
public void addAnswer(Answer answer, boolean correct) {
answer.setCorrect(correct);
answer.setQuestion(this);
answers.add(answer);
}
public void removeAnswer(Answer answer) {
answers.remove(answer);
}
public int getId() {
return id;
}
public String getText_question() {
return text_question;
}
public void setText_question(String text_question) {
this.text_question = text_question;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public List<Answer> getAnswers() {
return answers;
}
public void setAnswers(List<Answer> answers) {
this.answers = answers;
}
@Override
public String toString() {
return "Question: " + getText_question();
}
}
Я могу просто получить все объекты Answer вот так: .createQuery(From Answer) и методами Java получить нужные, обычным сравнением. Но нужно же сделать правильно.
Не видя класс сущности, нельзя дать ответ. Кроме той проблемы, которую подсвечивает вам IDE, ещё в глаза сразу бросается, что у вас в запросе есть placeholder для id
, но вы не передаёте значение для него. Вероятно, рабочий код должен выглядеть так:
Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
String hql = "SELECT a FROM com.quiz2.models.Answer WHERE a.question = :question";
Query<Answer> query = session.createQuery(hql, Answer.class);
query.setParameter("question", someQuestionObject);
List<Answer> answers = query.list();
P.S. Подумайте об использовании JPA.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно, чтобы компаратор отсортировал массив по Типу(Type) и Цене(Price)
Скорее всего проблема WildflyЛог jenkins с настройками:
есть файл который содержит базу данных- он создаётся кодом с#, но есть загвоздка в том, что он с паролемВот строка подключения от автора проги...
Даны два спискаНеобходимо слить два списка в один, отсортировать по убыванию и вывести