Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
1
Другое

Hibernate: Обновление коллекций после вставки родительского объекта

23.03.2019, 09:48. Показов 897. Ответов 3

Author24 — интернет-сервис помощи студентам
Имеется замапленный объект содержащий коллекцию замапленных объектов.
т.е отношение one-to-many.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0"?>
 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
    <class name="com.moc.AttributesTest$Attributable"
           table="BDOC">
        <composite-id>
            <key-property name="id"              column="ID"      type="long"      access="com.moc.Accessor"/>
            <key-property name="creationDate"    column="CDATE"   type="calendar"  access="com.moc.Accessor"/>
        </composite-id>
 
        <map name="attributes"
             table="DEF"
             cascade="all-delete-orphan"
             lazy="false"
             batch-size="5">
            <key not-null="true" update="true">
                <column name="PID"/>
                <column name="CDATE"/>
            </key>
            <map-key column="NAME" type="string" alias="name"/>
            <one-to-many entity-name="DAttributes"/>
        </map>
    </class>
 
    <class name="com.moc.Attribute"
           entity-name="DAttributes"
           table="DEF"
           dynamic-update="true"
           dynamic-insert="true">
 
        <id name="id" type="long" node="id">
            <generator class="native">
                <param name="sequence">S_DEF</param>
            </generator>
        </id>
        <property name="type"           type="string"       column="TYPE"   not-null="true"/>
        <property name="dateCreated"    type="calendar"     column="CDATE"  not-null="true" insert="false" update="false"/>
        <property name="name"           type="string"       column="NAME"   not-null="true" insert="false" update="false"/>
        <property name="stringValue"    type="string"       column="VALUE"/>
        <property name="isChanged"      type="true_false"   column="IS_CHANGED"/>
    </class>
</hibernate-mapping>
Выполняю его вставку
Java
1
2
3
4
5
session = sessionFactory.openSession();
session.saveOrUpdate(attributable);
session.flush();
session.clear();
session.close();

Логи этого действия:
SQL
1
2
3
4
5
Hibernate: SELECT updateexte_.ID, updateexte_.CDATE FROM BDOC updateexte_ WHERE updateexte_.ID=? AND updateexte_.CDATE=?
Hibernate: SELECT S_DEF.nextval FROM dual
Hibernate: INSERT INTO BDOC (ID, CDATE) VALUES (?, ?)
Hibernate: INSERT INTO DEF (TYPE, VALUE, IS_CHANGED, PID, CDATE, NAME, id) VALUES (?, ?, ?, ?, ?, ?, ?)
Hibernate: UPDATE DEF SET PID=?, CDATE=?, NAME=? WHERE id=?
Если проставить признак обновления ключа объекта как [B]false[B]
XML
1
<key not-null="true" update="false">
то имею следующие логи:
SQL
1
2
3
4
Hibernate: SELECT updateexte_.ID, updateexte_.CDATE FROM BDOC updateexte_ WHERE updateexte_.ID=? AND updateexte_.CDATE=?
Hibernate: SELECT S_DEF.nextval FROM dual
Hibernate: INSERT INTO BDOC (ID, CDATE) VALUES (?, ?)
Hibernate: INSERT INTO DEF (TYPE, VALUE, IS_CHANGED, PID, CDATE, NAME, id) VALUES (?, ?, ?, ?, ?, ?, ?)

Вопросы:
- Зачем флаг [XML]<key not-null="true" update="false">[/XML] и когда может понадобится обновлять ключи map-ы?

- Как можно отловить последующий update?

- Почему последующий update включает поле NAME хотя в map оно не является ключевым?

PS: PreUpdateEventListenerComposite не отлавливает этого действия.


Этот же вопрос на https://stackoverflow.com/ques... -insertion
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2019, 09:48
Ответы с готовыми решениями:

обновление после вставки
Как можно обновить таблицу после вставки новой строки? Для того что бы были видны те значения,...

Обновление DataGridView после вставки записи в БД
Всем hello. Есть класс ConnectDB и 2 формы Customer_catalog и Add_customer. В классе ConnectDB...

Обновление родительского окна из POPUP'a
Помогите пожалуйста.

Получить имя родительского объекта
Здравствуйте. Как получить имя контейнера Grid, в котором расположен элемент Button?

3
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.03.2019, 11:31 2
зачем hibeenate конфигурировать в xml?
0
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
23.03.2019, 12:25  [ТС] 3
Цитата Сообщение от xoraxax Посмотреть сообщение
зачем hibeenate конфигурировать в xml?
Так исторически сложилось. Необходимо делать именно в XML.
0
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
29.03.2019, 13:08  [ТС] 4
Вопрос еще актуален.
0
29.03.2019, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2019, 13:08
Помогаю со студенческими работами здесь

Поиск родительского элемента\объекта
Вообщем, есть нажатие на элемент. Вызывается событие, например: public void...

Ng-repeat, получение объекта из родительского scope
Есть массив, из которого рисуется таблица через ng-repeat &lt;tr ng-repeat=&quot;chart in chartList&quot;&gt;...

Границы родительского объекта и подрезка дочернего
Всем доброго времени суток! Очень не хотелось плодить темы, но решил попытать счастья ещё раз,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru