Supprimer la requête Hibernate

Lorsque j'essaie de supprimer une entrée à partir d'une base, à l'aide de

session.delete(object) 

alors je peux le suivant:

1) Si la ligne est présente dans la bd puis deux requêtes SQL sont l'obtention d'exécution: Une de sélectionner et de supprimer

2) Si la ligne n'est pas présente dans la base de données, puis seulement la requête select est arriver exécuté

Mais encore une fois ce n'est pas le cas pour la mise à jour. Indépendamment de la présence de DB lignes, seule la requête de mise à jour est prise en exécution.

S'il vous plaît laissez-moi savoir pourquoi ce genre de comportement pour l'opération de suppression. N'est-il pas un problème de performance depuis deux requêtes se faire frapper plutôt qu'un seul?

Edit:

Je suis de l'utilisation d'hibernate 3.2.5

Exemple de code:

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
    Session session = sessionFactory.openSession();
    Student student = new Student();
    student.setFirstName("AAA");
    student.setLastName("BBB");
    student.setCity("CCC");
    student.setState("DDD");
    student.setCountry("EEE");
    student.setId("FFF");
    session.delete(student);
    session.flush();
            session.close();

cfg.xml

<property name="hibernate.connection.username">system</property>
    <property name="hibernate.connection.password">XXX</property>
    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521/orcl</property>      
    <property name="hibernate.jdbc.batch_size">30</property>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
    <property name="hibernate.cache.use_query_cache">false</property>
    <property name="hibernate.cache.use_second_level_cache">false</property>
    <property name="hibernate.connection.release_mode">after_transaction</property>
    <property name="hibernate.connection.autocommit">true</property>
    <property name="hibernate.connection.pool_size">0</property>
    <property name="hibernate.current_session_context_class">thread</property>    
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>        

hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.infy.model.Student" table="STUDENT">
    <id name="id" column="ID">
        <generator class="assigned"></generator>
    </id>
    <property name="firstName" type="string" column="FIRSTNAME"></property>
    <property name="lastName" type="string" column="LASTNAME"></property>
    <property name="city" type="string" column="CITY"></property>
    <property name="state" type="string" column="STATE"></property>
    <property name="country" type="string" column="COUNTRY"></property>        
</class>

  • Hibernate n'parfois faire un select avant une mise à Jour. Il dépend de l'état de l'objet est (persistante, transitoire ou détaché). Pour répondre à votre question, il sera utile de voir votre exemple de code.
InformationsquelleAutor user182944 | 2012-11-03