Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для 3BEPb_TyTa
18 / 18 / 4
Регистрация: 18.05.2010
Сообщений: 83

Hibernate создание элементов коллекции

01.11.2013, 17:25. Показов 1180. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, форум. У меня есть 2 класса-сущности, один из которых содержит List объектов другого.

Book.java
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
public class Book {
    
    private Integer ID = null;
    private String title;
    
    private Library library;
    
    public Book(){
        super();
    }
    
    public Book(String title) {
        super();
        this.title = title;
    }
 
    public Integer getID() {
        return ID;
    }
 
    public void setID(Integer iD) {
        ID = iD;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public Library getLibrary() {
        return library;
    }
 
    public void setLibrary(Library library) {
        this.library = library;
    }
}
Library.java
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
public class Library{
    private List<Book> books;
    protected String name;
    protected Integer id;
    
    public Library(){
        this.books = new ArrayList<Book>();
    }
    
    public Library(String name) {
        this.books = new ArrayList<Book>();
        this.name = name;
    }
    
    public void addBook(Book book) throws IdentifierAlreadyExiststException{
        boolean exists = Boolean.FALSE;
        for(Book exBook : books){
            if(exBook.getID() != null)
                if(exBook.getID() == book.getID()){
                    exists = Boolean.TRUE;
                    break;
                }
        }
        
        if(!exists){
            book.setLibrary(this);
            books.add(book);
        }
        else{
            throw new IdentifierAlreadyExiststException("A book with the same id already existed in this library. ID=" + book.getID());
        }
    }
 
    public List<Book> getBooks(){
        return books;
    }
    
    public void setBooks(List<Book> books){
        this.books = books;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
}
Файлы маппинга:
Book.hbm.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="draft">
    <class name="Book" table="books">
        <id column="id" name="ID" type="java.lang.Integer">
          <generator class="increment"/>
        </id>
        <property column="title" name="title" type="java.lang.String"/>
        <many-to-one name="library" column="lib_id" class="Library" not-null="true" lazy="false"/>
    </class>
</hibernate-mapping>
Library.hbm.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="draft">
    <class name="Library" table="libraries">
        <id column="id" name="id" type="java.lang.Integer">
              <generator class="increment"/>
        </id>
        <property column="name" name="name" type="java.lang.String" not-null="true"/>
        <list name="books" cascade="save-update, delete" inverse="true" lazy="false">
          <key column="lib_id"/>
          <list-index column="book_index"/>
          <one-to-many class="Book"/>
        </list>
    </class>
</hibernate-mapping>
Теперь, собственно, проблема. Hibernate требует для коллекций типа List индекс-столбец в соответствующей таблице куда он заносит индексы элементов коллекции в этой самой коллекции. Если я захочу сделать save библиотеки, то Hibernate занесёт в БД запись о Library и записи о всех Book, содержащихся в коллеции books объекта Library, при этом заполняя индекс-столбец. Но если я сделаю save Book, то хибернейт не обновит ту самую индекс колонку, сохранит в записи только id соответсвующей Library и несвязанные поля, а значение индекса установит в null.

После, при попытке достать эту Library хибрнейт начинает ругаться мол индекс не может быть null и выкидывает эксепшн.

Так вот вопрос: как сделать так, чтобы при сохранении объекта коллеции индекс устанавливался корректно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2013, 17:25
Ответы с готовыми решениями:

Hibernate : выбрать родителя, по кол-ву элементов в дочерней коллекции
Вечер добрый. Есть родитель(Film), у него есть список кадров(Still) : Маппинг такой: @OneToMany(targetEntity = Still.class,...

Ошибка при запросе коллекции из объекта сущности Hibernate
Здравствуйте! Есть сущность сформированная Hibernate, в которой есть поле хранящие коллекцию объектов по связи один ко многим (private...

Ошибка при попытке отобрать данные используя Stream из коллекции сущностей Hibernate
Здравствуйте форумчане! Подскажите пожалуйста почему при попытке отобрать из коллекции сущностей с помощью frameworka Stream, объекты...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2013, 17:25
Помогаю со студенческими работами здесь

Hibernate: создание таблицы-замыкания
Доброго времени суток! Прошу помощи по реализации такой сущности в Hibernate, таблица references(ссылки) в центре: Суть её в том,...

Создание и открытие сессии в Hibernate
Здравствуйте! В проект Maven подключил зависимости Hibernate, добавил поддержку Hibernate в проект. В автоматическом режиме...

Написать фильтр для элементов коллекции
Пожалуйста помогите с этими заданиями. Коллекции (10) 5) Написать фильтр для элементов коллекции. Для этого создать интерфейс,...

Hibernate и коллекции
Разбираюсь с Hibernate. Возникла сложность : есть у меня Task и TaskList . Мне нужно с TaskList-а получить список Task-ов . Не могу понять...

Hibernate. Сделать join коллекции
Есть 2 сущности: @Entity @Table(name = &quot;A&quot;) class A{ @Id private long id; @OneToMany(mapped by=&quot;a&quot;) ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru