当我们访问URI时,例如localhost:8080 / QuizProject / webapi / questions,我们收到500内部服务器错误。
没有特定的错误消息,数据库接收并获取信息,我们知道这是由于System.out.println
。
使用id检索所有问题或特定问题的两种方法。
@Path("/questions")
public class QuestionResource {
private QuestionService questionService = new QuestionService();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Question> getAllQuestions()
{
return questionService.getAllQuestions();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{questionId}")
public Question getQuestion(@PathParam("questionId") int id)
{
return questionService.getQuestion(id);
}
}
使用hibernate-methods的类
package home.neshoz.Quiz222.services;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import home.neshoz.Quiz222.HibernateTools.HibernateUtil;
import home.neshoz.Quiz222.model.Answer;
import home.neshoz.Quiz222.model.Question;
public class QuestionService
{
private SessionFactory sessionFactory;
private Session session;
public List<Question> getAllQuestions()
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
List<Question> questionList = session.createCriteria(Question.class).list();
session.getTransaction().commit();
return questionList;
}
public Question getQuestion(int id)
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
Question question = (Question)session.get(Question.class, id);
Collection<Answer> answerList = question.getAnswerList();
for(Answer a : answerList)
{
System.out.println(a.getAnswer());
}
session.getTransaction().commit();
session.close();
return question;
}
public Question addQuestion(Question question)
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
session.save(question);
session.getTransaction().commit();
session.close();
return question;
}
public Question editQuestion(int id, String updatedQuestion)
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
Question question = (Question)session.get(Question.class, id);
question.setQuestion(updatedQuestion);
session.update(question);
session.getTransaction().commit();
session.close();
return question;
}
public Question deleteQuestion(int id)
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
Question question = (Question)session.get(Question.class, id);
session.delete(question);
session.getTransaction().commit();
session.close();
return question;
}
}
问题类
package home.neshoz.Quiz222.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@Entity
@Table(name = "Questions")
public class Question implements Serializable
{
@Id
@GeneratedValue
@Column(name = "Id")
private int id;
private String question;
@OneToMany(targetEntity = Answer.class, mappedBy = "question", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Answer> answerList = new HashSet<Answer>();
public Question()
{
}
public Question(String question)
{
this.question = question;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getQuestion()
{
return question;
}
public void setQuestion(String question)
{
this.question = question;
}
public Set<Answer> getAnswerList()
{
return answerList;
}
public void setAnswerList(Set<Answer> answerList)
{
this.answerList = answerList;
}
}
答案级
package home.neshoz.Quiz222.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "Answers")
public class Answer implements Serializable
{
@Id
@GeneratedValue
@Column(name = "Id")
private int id;
@Column(name = "Answer")
private String answer;
@Column(name = "correctAnswer")
private String correctAnswer;
@ManyToOne
@JoinColumn(name = "Questions_Id")
private Question question;
public Answer()
{
}
public Answer(String answer)
{
this.answer = answer;
}
public Question getQuestion()
{
return question;
}
public void setQuestion(Question question)
{
this.question = question;
}
public int getAnswerId()
{
return id;
}
public void setAnswerId(int answerId)
{
this.id = answerId;
}
public String getAnswer()
{
return answer;
}
public void setAnswer(String answer)
{
this.answer = answer;
}
public String getCorrectAnswer()
{
return correctAnswer;
}
public void setCorrectAnswer(String correctAnswer)
{
this.correctAnswer = correctAnswer;
}
}
主级。
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import home.neshoz.Quiz222.HibernateTools.HibernateUtil;
import home.neshoz.Quiz222.model.Answer;
import home.neshoz.Quiz222.model.Question;
public class HibernateInsertDemo
{
private static SessionFactory sessionFactory;
private static Session session;
public static void main(String[] args)
{
Question q = new Question("F1");
Answer a1 = new Answer("A1");
Answer a2 = new Answer("A2");
q.getAnswerList().add(a1);
q.getAnswerList().add(a2);
a1.setQuestion(q);
a2.setQuestion(q);
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
session.save(q);
session.getTransaction().commit();
session.close();
}
}