Добрый день.
Пытаюсь осваивать Hibernate. В java я новичек и вот все бы ничего, но столкнулся с вопросом:
есть проект MyTabHib структура:
+src
.......+DAO
...............Factory.java //класс для вызова методов для работы с БД
...............IDepartment.java //интрефейс для описания методов работы с БД
.......+DAO.Impl
......................DepartmentImpl // реализация интерфейса
.......+logic
...............Department.java //класс-сущность
.......+tools
...............MySprav.java //сервлет в котором заполняется список
...............Main.java //тут тоже что и в сервлете
.......+utils
...............HibernateUtil.java
.......hibernate.cfg.xml //конфигурационный файл проекта
========================================================
файл hibernate.cfg.xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/MyTabelHib</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.pool_size">10</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="current_session_context_class">thread</property>
<mapping class="logic.Sotrudnik" />
<mapping class="logic.Department" />
</session-factory>
</hibernate-configuration>
==========================================
файл Department.java:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
package logic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="Department")
public class Department {
private int id_dep;
private String Dep;
public Department() {
Dep = null;
}
public Department(String dep) {
Dep = dep;
}
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="id_dep")
public int getId_dep() {
return id_dep;
}
@Column(name="Dep")
public String getDep() {
return Dep;
}
public void setId_dep(int id_dep) {
this.id_dep = id_dep;
}
public void setDep(String dep) {
Dep = dep;
}
}
===============================
файл HibernateUtil.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
package utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
static {
try{
//creates the session factory from hibernate.cfg.xml
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
=============================
файл IDepartment.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package DAO;
import java.sql.SQLException;
import java.util.List;
import logic.Department;
public interface IDepartment {
public void addDep(Department dep) throws SQLException; //добавить отдел
public List<Department> getDepAll() throws SQLException; //получить список всех отделов
}
==============================
файл DepartmentImpl.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
package DAO.Impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Session;
import utils.HibernateUtil;
import logic.Department;
import DAO.IDepartment;
public class DepartmentImpl implements IDepartment {
public void addDep(Department dep) throws SQLException {
// TODO Auto-generated method stub
}
public List<Department> getDepAll() throws SQLException {
Session sess = null;
List<Department> deps = new ArrayList<Department>();
try {
sess = HibernateUtil.getSessionFactory().openSession();
sess.beginTransaction();
deps = sess.createCriteria(Department.class).list();
//deps = sess.createSQLQuery("select * from Department").addEntity(Department.class).list();
//deps = (List<Department>)sess.createQuery("from Department").list();
sess.getTransaction().commit();
System.out.println(deps);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if(sess != null && sess.isOpen()) {
sess.clear();
}
}
return deps;
}
}
===============================
файл Factory.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package DAO;
import DAO.Impl.DepartmentImpl;
import DAO.Impl.SotrudnikDAOImpl;
public class Factory {
private static ISotrudnikDAO sotrDAO = null;
private static IDepartment depsDAO = null;
private static Factory instance = null;
public static synchronized Factory getInstance() {
if(instance == null) {
instance = new Factory();
}
return instance;
}
public ISotrudnikDAO getSotrDAO() {
if(sotrDAO == null) {
sotrDAO = new SotrudnikDAOImpl();
}
return sotrDAO;
}
public IDepartment getDepDAO() {
if(depsDAO == null) {
depsDAO = new DepartmentImpl();
}
return depsDAO;
}
}
========================
файл-servlet MySprav.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
package tools;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import DAO.Factory;
import logic.Department;
/**
* Servlet implementation class MySprav
*/
@WebServlet("/MySprav")
public class MySprav extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MySprav() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
HttpSession sess = request.getSession(true);
String url = "/my-sprav.jsp";
//List<Department> deps = new ArrayList<Department>();
PrintWriter out = response.getWriter();
//List<Department> deps;
List<Department> deps;
try {
deps = Factory.getInstance().getDepDAO().getDepAll();
for(int i=0; i < deps.size(); i++) {
System.out.println(deps.get(i).getDep()+":"+deps.get(i).getId_dep());
}
sess.setAttribute("deps", deps);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect("/MyTabHib/"+url);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
============================
файл Main.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package tools;
import java.sql.SQLException;
import java.util.List;
import logic.Department;
import logic.Sotrudnik;
import DAO.Factory;
public class Main {
public static void main(String[] args) throws SQLException {
// List<Sotrudnik> sotr = Factory.getInstance().getSotrDAO().getAllSotr();
// for(int i=0; i < sotr.size(); i++) {
// System.out.println(sotr.get(i).getUser()+":"+sotr.get(i).getId_user());
//out.println(sotr.get(i).getUser()+":"+sotr.get(i).getId_user());
// }
List<Department> deps = Factory.getInstance().getDepDAO().getDepAll();
for(int i=0; i < deps.size(); i++) {
System.out.println(deps.get(i).getDep()+":"+deps.get(i).getId_dep());
}
}
}
Вопрос1: почему в Main.java список(deps) заполняется и выводится как надо, а в сервлете(MySprav.java) выводит [] (вроде как пустой список?)
Нужно получить список отделов организации наприм:
Администрация:1
Отдел Продаж:2
ИТ:3
и т.д.
Вопрос2: может можно после решения 1-го вопроса получить этот список в jsp-странице без передачи его из сервлета (c помощью jstl-тегов), если можно, то как?
Заранее спасибо.