Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97

Повторяющиеся значения в session.createCriteria(class).list()

03.04.2016, 20:01. Показов 660. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. пишу дао на hibernate. Сделал такой метод
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public List<Project> getPrjs() throws SQLException {
        List<Project> prjs = new ArrayList<>(); ;
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            prjs = session.createCriteria(Project.class).list();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
                session.close();}
        return prjs;
    }

в результате, данные почему-то выводятся в нескольких екземплярах:

3 Title_3 DESCRIPTION_3 [ 2, 1, ]
2 Title_2 DESCRIPTION_2 [ 2, 1, ]
1 Title_1 DESCRIPTION_1 [ 2, 1, 5, ]
3 Title_3 DESCRIPTION_3 [ 2, 1, ]
2 Title_2 DESCRIPTION_2 [ 2, 1, ]
1 Title_1 DESCRIPTION_1 [ 2, 1, 5, ]
4 Title_4 DESCRIPTION_4 [ 3, 4, ]
4 Title_4 DESCRIPTION_4 [ 3, 4, ]
5 Title_5 DESCRIPTION_5 [ 6, 5, ]
1 Title_1 DESCRIPTION_1 [ 2, 1, 5, ]
5 Title_5 DESCRIPTION_5 [ 6, 5, ]
6 Title_6 DESCRIPTION_6 [ ]

Подскажите пожалуйста как исправить?Спасибо.

Добавлено через 2 часа 37 минут
Если что, бин Project выглядит таким образом
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
package model;
 
import java.util.*;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name= "PROJECT")
public class Project{
    @Id
    @Column(name= "PROJ_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name= "TITLE", length=64)
    private String title;
    @Column(name= "DESCRIPTION", length=64)
    private String description;
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "EMPL_PROJECT",
             joinColumns = { @JoinColumn(name = "EMPL_ID") }, 
             inverseJoinColumns = { @JoinColumn(name = "PROJ_ID") })
    private Set<Employee> empList=new HashSet<>();
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public Set<Employee> getEmpList() {
        return empList;
    }
 
    public void setEmpList(Set<Employee> empList) {
        this.empList = empList;
    }
 
    String getEmpId(){
        String listId="[ ";
        for(Employee p:empList)listId+=p.getId()+", ";
        listId+="]";
        return listId;
    }
    
    @Override
    public String toString() {
        return id + " " + title + " " + description +" "+getEmpId();
    }
    
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2016, 20:01
Ответы с готовыми решениями:

Session list
Всем добрый вечер, я в учебных целях пишу чат... Все делается в servlete уже все готово, остался только один вопрос не решенным:...

Тестирование c Mockito и createCriteria
Привет, подскажите почему получаю такую ошибку в коде, если nullpointer надо значить что-то еще застабить, что и как? @Test ...

JSP session.setAttribute and session.getAttribute
есть две страницы в одной session.setAttribute, во второй session.getAttribute. Во второй session.getAttribute передает NULL. У меня...

4
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
03.04.2016, 22:07
Цитата Сообщение от Козак Алексей Посмотреть сообщение
данные почему-то выводятся в нескольких екземплярах:
А в таблице БД этих повторений нет?
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
03.04.2016, 22:14  [ТС]
reisal78, в бд всего 6 записей (с первого по шестой проджект). Может дело в many to many на емплоерах? Может оно как-то считает проджекты из таблицы Project и проджекты из связующей с емплоерами таблицы и вместе их как-то выводит? Я только начал использовать эту анотацию, и еще не знаю точно все ее нюансы..
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
03.04.2016, 23:31
Козак Алексей, лично я без полного кода врятли смогу вам помочь.
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
04.04.2016, 10:11  [ТС]
reisal78, Структура проекта.
Бин емплоера:
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
package model;
 
import java.util.*;
import javax.persistence.*;
 
@Entity
@Table(name= "EMPL")
public class Employee {
    @Id
    @Column(name= "EMP_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name= "NAME")
    private String name;
    @Column(name= "SALARY")
    private int sal;
    @Column(name= "DEPTNO")
    private int deptno;
    
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "EMPL_PROJECT",
             joinColumns = { @JoinColumn(name = "EMPL_ID") }, 
             inverseJoinColumns = { @JoinColumn(name = "PROJ_ID") })
    private Set<Project> prjList=new HashSet<>();
    
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getSal() {
        return sal;
    }
 
    public void setSal(int sal) {
        this.sal = sal;
    }
 
    public int getDeptno() {
        return deptno;
    }
 
    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }
 
    public Set<Project> getPrjList() {
        return prjList;
    }
 
    public void setPrjList(Set<Project> prjList) {
        this.prjList = prjList;
    }
 
    String getPrjId(){
        String listId="[ ";
        for(Project p:prjList)listId+=p.getId()+", ";
        listId+="]";
        return listId;
    }
    
    @Override
    public String toString() {
        return id + " " + name + " " + sal + " " + deptno + " " + getPrjId();
    }
 
}

Создание сессий (HibernateUtil)
Кликните здесь для просмотра всего текста
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
package util;
 
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
 
public class HibernateUtil {
 
    private static SessionFactory sessionFactory;
 
    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
           // throw new ExceptionInInitializerError(ex);
        }
    }
 
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

EmployeeDAO
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package dao;
 
import java.sql.SQLException;
import java.util.List;
 
import model.Employee;
 
 
public interface EmployeeDAO {
    public void addEmp(Employee e) throws SQLException;
    public void deleteEmp(Employee e) throws SQLException;
    public Employee getEmp(int id) throws SQLException;
    public List<Employee> getEmps() throws SQLException;
}

ProjectDAO
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package dao;
 
import java.sql.SQLException;
import java.util.List;
 
import model.Employee;
import model.Project;
 
 
public interface ProjectDAO {
    public void addPrj(Project e) throws SQLException;
    public void deletePrj(Project e) throws SQLException;
    public Project getPrj(int id) throws SQLException;
    public List<Project> getPrjs() throws SQLException;
}

Их реализация:
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
package dao.impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
import org.hibernate.Session;
 
import dao.EmployeeDAO;
import model.Employee;
import model.Project;
import util.HibernateUtil;
 
public class EmployeeDAOImpl implements EmployeeDAO {
 
    @Override
    public void addEmp(Employee e) throws SQLException {
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(e);
            session.getTransaction().commit();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
            session.close();}
    }
 
    @Override
    public void deleteEmp(Employee e) throws SQLException {
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.delete(e);
            session.getTransaction().commit();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
            session.close();}
    }
 
    @Override
    public Employee getEmp(int id) throws SQLException {
        Employee emp=null;
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            emp = (Employee)session.get(Employee.class, id);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
                session.close();}
        
        return emp;
    }
 
    @Override
    public List<Employee> getEmps() throws SQLException {
        List<Employee> emps = null;
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            emps = session.createCriteria(Employee.class).list();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
                session.close();}
        return emps;
    }
 
}
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
package dao.impl;
 
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import dao.ProjectDAO;
import model.Project;
import util.HibernateUtil;
 
public class ProjectDAOImpl implements ProjectDAO {
 
    @Override
    public void addPrj(Project e) throws SQLException {
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(e);
            session.getTransaction().commit();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
            session.close();}
    }
 
    @Override
    public void deletePrj(Project e) throws SQLException {
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.delete(e);
            session.getTransaction().commit();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
            session.close();}
    }
 
    @Override
    public Project getPrj(int id) throws SQLException {
        Project prj=null;
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            prj = (Project)session.get(Project.class, id);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
                session.close();}
        
        return prj;
    }
 
    @Override
    public List<Project> getPrjs() throws SQLException {
        List<Project> prjs = new ArrayList<>(); ;
        Session session=null;
        try{
            session=HibernateUtil.getSessionFactory().openSession();
            prjs = session.createCriteria(Project.class).list();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if((session!=null) && (session.isOpen()))
                session.close();}
        return prjs;
    }
 
}

Фабрика для вызова DAO
Кликните здесь для просмотра всего текста
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
package util;
 
import dao.EmployeeDAO;
import dao.ProjectDAO;
import dao.impl.EmployeeDAOImpl;
import dao.impl.ProjectDAOImpl;
 
public class Factory {
    
    public static Factory instance=new Factory();
    public EmployeeDAO empDAO;
    public ProjectDAO prjDAO;
    
    private Factory(){}
    
    public static Factory getInstance() {
        return Factory.instance;
    }
 
    public EmployeeDAO getEmpDAO() {
        if(empDAO==null)empDAO=new EmployeeDAOImpl();
        return empDAO;
    }
    
    public ProjectDAO getPrjDAO() {
        if(prjDAO==null)prjDAO=new ProjectDAOImpl();
        return prjDAO;
    }
}

hibernate.cfg.xml
Кликните здесь для просмотра всего текста
XML
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
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 
<hibernate-configuration>
 
    <session-factory>
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
        <property name="connection.username">hr</property>
        <property name="connection.password">66623666</property>
 
        
 
      <!---   <property name="connection.pool_size">10</property> -->
 
        <property name="current_session_context_class">thread</property>
 
      <!---   <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>-->
 
     <!---   <property name="show_sql">true</property>-->
 
      <mapping class="model.Employee"/>
      <mapping class="model.Project"/>
 
    </session-factory>
 
</hibernate-configuration>

От сюда все запускаю (чтоб проверить)
Кликните здесь для просмотра всего текста
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
package util;
 
import java.sql.SQLException;
import java.util.List;
 
import dao.EmployeeDAO;
import dao.ProjectDAO;
import dao.impl.EmployeeDAOImpl;
import model.Employee;
import model.Project;
 
public class Main {
 
    public static void main(String[] args) throws SQLException {
        
        Factory factory=Factory.getInstance();
        //EmployeeDAO empDAO=factory.getEmpDAO();
        ProjectDAO empDAO=factory.getPrjDAO();
        
        //for(Employee e:empDAO.getEmps())System.out.println(e);
        System.out.println(empDAO.getPrj(2));
 
    }
 
}


бин проджекта в первом посте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2016, 10:11
Помогаю со студенческими работами здесь

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например, myList. Сейчас я могу с помощью...

Ошибка reference to List is ambiguous; both interface java.util.List in package java.util and class java.awt.List in...
Почему кгда я загружаю пакеты awt, utill вместе в одной проге при обьявлении елемента List я ловлю такую ошибку. 'listTest.java':...

Что твориться с сессиями ? (strListingID = Session('ListingID'); strAccountID = Session('AccountID'); strActive = Session('Active'); )
-----------------------page1.asp-------------------------- Basicrs = Server.CreateObject('ADODB.Recordset'); theSQL='....'; ...

Почему session('aaa') обнуляется при session.Abandon, а session.sessionid остается таким же ?
Народ помогите &lt;% response.write(session.sessionid) response.write(session('aaa')) session.Abandon ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru