Я начал с небольшой программы с двумя классами в Java, которая использовала JSTL для создания веб-приложения.Теперь я хотел бы добавить Hibernate, чтобы информация сохранялась в базе данных и не удалялась после закрытия программ.Проблема в том, что я не знаю, как поставить эту технологию вместе.У меня есть два метода, которые позволяют мне добавлять и редактировать с использованием JSTL:
private void addPerson(HttpServletRequest request, HttpSession session) {
String name = request.getParameter("name");
String name2 = request.getParameter("name2");
Person person = new Person(name, name2);
Map<Integer, Person> persons = (Map<Integer, Person>) session.getAttribute("persons");
if (persons == null) {
persons = new HashMap<>();
}
persons.put(person.getId(), person);
session.setAttribute("persons", persons);
request.setAttribute("_OK", + person.getName() + " " + person.getName2());
}
метод редактирования:
private void editPerson(HttpServletRequest request, HttpSession session) {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String name2 = request.getParameter("name2");
Map<Integer, Person> person = (Map<Integer, Person>) session.getAttribute("person");
if (person == null) {
person = new HashMap<>();
}
Person person = person.get(id);
person.setNume(name);
person.setDescriere(name2);
request.setAttribute("_OK", "Edited persons: " + person.getName() + " " + person.getName2());
}
И я получил свои методы Hibernate:
public Person add(Person e){
try {
em().getTransaction().begin();
em().persist(e);
em().getTransaction().commit();
}catch (PersistenceException pe) {
pe.printStackTrace();
em().getTransaction().rollback();
}
return e;
}
public Person modify (Person e){
try {
em().getTransaction().begin();
em().persist(e);
em().getTransaction().commit();
}catch (PersistenceException pe) {
pe.printStackTrace();
em().getTransaction().rollback();
}
return e;
}
public List<Person> readAll(){
CriteriaBuilder builder = em().getCriteriaBuilder();
Class<Person> clazz = entityClass();
CriteriaQuery<Person> query = builder.createQuery(clazz);
Root<Person> root = query.from(clazz);
query.select(root);
return em().createQuery(query).getResultList();
}
любая идея, как использовать их в JSTL?
Позже редактирование: я попытался вызвать свой метод Hibernate в файле jsp, поэтому я сделал это:
<%@ page import="app.OpStudent" %>
<%@ page import="app.Database" %>
.......
private void addPerson(HttpServletRequest request, HttpSession session) {
String name= request.getParameter("name");
String name2= request.getParameter("name2");
Person person = new Person (name, name2);
Database.getEM;
OpPerson op = new OpPerson;
op.add(person);
класс OpPerson - это класс, в котором у меня есть методы гибернации.В классе Database я получил это:
public class Database {
private static final EntityManagerFactory emf = Persistence
.createEntityManagerFactory("personDb");
private static EntityManager em = emf.createEntityManager();
public static EntityManager getEM() {
if (em == null || !em.isOpen()) {
em = emf.createEntityManager();
}
return em;
}
Но теперь я получаю эту ошибку:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [43] in the jsp file: [/Person.jsp]
Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration
40: String name= request.getParameter("name");
41: String name2= request.getParameter("name2");
42: Person person = new Person (name, name2);
43: Database.getEM;
44: OpPerson op = new OpPerson;
45: op.add(person);
Из того, что я нашел, эта ошибка выдается, когда вы вызываете переменную, которая не инициализирована,Но как здесь быть?