powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Не работает Session.delete() в Hibernate
11 сообщений из 11, страница 1 из 1
Не работает Session.delete() в Hibernate
    #33087220
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
session = sessionFactory.openSession();
session.save(client);
session.delete(client);
session.close();

Log:

Hibernate: insert into Clients (email, password, cli_name, address, inn, kpp, isPhisical, isnew) values (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select last_insert_id()
Hibernate: insert into Contacts (fio, job_title, phone, client_id) values (?, ?, ?, ?)
Hibernate: select last_insert_id()

В чем проблема?

Вот маппинги:

Client

<hibernate-mapping>

<class name="dao.ClientImp1" table="Clients">


<id name="clientId" type="integer" unsaved-value="null" >
<column name="id" sql-type="int" not-null="true"/>
<generator class="identity"/>
</id>


<property name="email" type="string">
<column name="email" sql-type="varchar(50)" length="16" not-null="true"/>
</property>

<property name="password" type="string">
<column name="password" sql-type="varchar(50)" not-null="true"/>
</property>

<property name="businessTitle" type="string">
<column name="cli_name" sql-type="varchar(180)" not-null="false"/>
</property>

<property name="businessAddress" type="string">
<column name="address" sql-type="varchar(240)" not-null="false"/>
</property>

<property name="clientInn" type="string">
<column name="inn" sql-type="varchar(30)" not-null="true"/>
</property>

<property name="clientKpp" type="string">
<column name="kpp" sql-type="varchar(9)" not-null="false"/>
</property>

<property name="isPhisical" type="string">
<column name="isPhisical" sql-type="enum('n','y')" not-null="true"/>
</property>


<property name="isNew" type="integer">
<column name="isnew" sql-type="tinyint(1)" not-null="false"/>
</property>


<set name="contacts" cascade="all">
<key column="client_id"/>
<one-to-many class="dao.ContactImp1"/>
</set>

</class>

</hibernate-mapping>

Contact

<hibernate-mapping>

<class name="dao.ContactImp1" table="Contacts">


<id name="contactId" type="integer" unsaved-value="null" >
<column name="id" sql-type="int" not-null="true"/>
<generator class="identity"/>
</id>


<property name="contactPersonName" type="string">
<column name="fio" sql-type="varchar(50)" length="16" not-null="true"/>
</property>

<property name="contactPersonJobPosition" type="string">
<column name="job_title" sql-type="varchar(50)" not-null="false"/>
</property>

<property name="contactPhones" type="string">
<column name="phone" sql-type="varchar(50)" not-null="true"/>
</property>

<many-to-one name="client" class="dao.ClientImp1" cascade="save-update" column="client_id"/>

</class>

</hibernate-mapping>
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33087301
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставить session.flush() перед session.close() ?
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33087338
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, спасибо.
Спотыкаюсь на всякой ерунде...
Если я правильно понял.. save() и delete() SQL - Запросы закэшировали , а после flush() все выполнились.
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33087341
. © .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у них есть подобие autocommit?

--
если снова отключат свет
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33087409
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
. © .а у них есть подобие autocommit?
session.setFlushMode(FlushMode.ALWAYS); - настоятельно не рекомендуется :)
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33088301
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а вот и грабли началися!
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33088520
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие грабли, человек забыл flush вызвать!?
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33088641
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять старый спор? Это он не _забыл_ про flush, а еще не _привык_ думать, как настоящий hiberнетчик должон. Вот и грабли.
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33089364
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokОпять старый спор? Это он не _забыл_ про flush, а еще не _привык_ думать, как настоящий hiberнетчик должон. Вот и грабли.
млять.
нет слов.
какие грабли??
это документация !
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33089794
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как порядочный юзер. Открываю html reference, ищу delete. Нашел пункт 9.5.
Ага, Session.delete() will remove an object's state from the database.
Хм.. не удаляется.
Да, я согласен, что надо читать всю документацию, чтобы не возникало такого.
Но когда хочется сделать простой работающий пример.



Документация:



9.5. Deleting persistent objects
Session.delete() will remove an object's state from the database. Of course, your application might still hold a reference to it. So it's best to think of delete() as making a persistent instance transient.

sess.delete(cat);
You may also delete many objects at once by passing a Hibernate query string to delete().

You may now delete objects in any order you like, without risk of foreign key constraint violations. Of course, it is still possible to violate a NOT NULL constraint on a foreign key column by deleting objects in the wrong order.

9.6. Flush
From time to time the Session will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, flush, occurs by default at the following points

from some invocations of find() or iterate()

from net.sf.hibernate.Transaction.commit()

from Session.flush()

The SQL statements are issued in the following order

all entity insertions, in the same order the corresponding objects were saved using Session.save()

all entity updates

all collection deletions

all collection element deletions, updates and insertions

all collection insertions

all entity deletions, in the same order the corresponding objects were deleted using Session.delete()

(An exception is that objects using native ID generation are inserted when they are saved.)

Except when you explicity flush(), there are absolutely no guarantees about when the Session executes the JDBC calls, only the order in which they are executed. However, Hibernate does guarantee that the Session.find(..) methods will never return stale data; nor will they return the wrong data.

It is possible to change the default behavior so that flush occurs less frequently. The FlushMode class defines three different modes. This is most useful in the case of "readonly" transactions, where it might be used to achieve a (very) slight performance increase.

sess = sf.openSession();
Transaction tx = sess.beginTransaction();
sess.setFlushMode(FlushMode.COMMIT); //allow queries to return stale state
Cat izi = (Cat) sess.load(Cat.class, id);
izi.setName(iznizi);
// execute some queries....
sess.find("from Cat as cat left outer join cat.kittens kitten");
//change to izi is not flushed!
...
tx.commit(); //flush occurs
...
Рейтинг: 0 / 0
Не работает Session.delete() в Hibernate
    #33093491
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тимоха, ты Тимоха ...
Обычный русский программист сначала налабает, а если чо не так в документацию полезет (сам такой). Кстати, hibernateвская оставляет желать лучшего.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Не работает Session.delete() в Hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]