IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Tables créées avec Hibernate sans cascade


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut Tables créées avec Hibernate sans cascade
    Bonjour,
    j'ai un petit souci avec la creation de mes tables avec hibernate:
    il n y a pas de cascade lorsque je vérifie le script sql de ma base de données, pourtant j'ai bien spécifié l'attribut cascade = CascadeType.ALL

    voila un exemple d'une entité parmi d'autre et comment je procède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Entity
    @Table(name = "item")
    public class Item implements java.io.Serializable {
     
        /**
         *
         */
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "IDitem", unique = true, nullable = false)
        private int iditem;
        @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @JoinColumn(name = "IDDIVISION", nullable = false)
        private Division division;
        @Column(name = "SIGLE", length = 254)
        private String sigleItem;
        @Column(name = "DESCRIPTION", length = 254)
        private String description;
        ...
    j'utilise mysql, voila le hibernate.cfg.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory name="session1">
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dac_bd4</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password"></property>
    		<property name="current_session_context_class">thread</property>
    		<property name="hibernate.show_sql">true</property>
    		<!-- JDBC connection pool (use the built-in) -->
    		<property name="connection.pool_size">1</property>
    		<!--Disable the second-level cache -->
    		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    		<property name="hibernate.cache.use_second_level_cache">false </property>
    		<property name="hibernate.cache.use_query_cache">true</property>
    		<property name="hibernate.cache.use_structured_cache">true</property>
    		<property name="hibernate.cache.use_minimal_puts">true</property>
     
    		<property name="hibernate.hbm2ddl.auto">create</property>
    	</session-factory>
    </hibernate-configuration>
    et le application-context.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
     
    	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    		<property name="driverClassName">
    			<value>com.mysql.jdbc.Driver</value>
    		</property>
    		<property name="url">
    			<value>jdbc:mysql://localhost:3306/dac_bd4</value>
    		</property>
    		<property name="username">
    			<value>root</value>
    		</property>
    	</bean>
    	<bean id="SessionFactory"
    		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="annotatedClasses">
    			<list>
    				<value>Dac.Entity.Division</value>
    				<value>Dac.Entity.Historique</value>
    				<value>Dac.Entity.Item</value>
    				<value>Dac.Entity.Role</value>
    				<value>Dac.Entity.Utilisateur</value>
    				<value>Dac.Entity.Habilitation</value>
    				<value>Dac.Entity.Statu</value>
    				<value>Dac.Entity.Audit</value>
    				<value>Dac.Entity.Question</value>
    				<value>Dac.Entity.Questionnaire</value>
    				<value>Dac.Entity.Referencereglementaire</value>
    				<value>Dac.Entity.Reponse</value>
    				<value>Dac.Entity.Theme</value>
    				<value>Dac.Entity.OrganismeAudite</value>
    				<value>Dac.Entity.RefQuest</value>
    				<value>Dac.Entity.Ecarts</value>
    				<value>Dac.Entity.NiveauEcart</value>
    				<value>Dac.Entity.Personnerencontree</value>
     
     
    			</list>
    		</property>
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    				<prop key="hibernate.hbm2ddl.auto">create</prop>
    				<prop key="hibernate.cache.use_query_cache">false</prop>
    				<prop key="hibernate.cache.use_second_level_cache">false</prop>
     
    			</props>
    		</property>
     
    	</bean>
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="SessionFactory" />
    	</bean>
     
    	<tx:annotation-driven transaction-manager="transactionManager" />
    	<context:annotation-config />
    	<context:component-scan base-package="Dac" />
     
    </beans>
    .

    Merci pour votre aide!

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    Ben, le CascadeType est une notion spécifique d'Hibernate qui n'a rien à voire avec le DELETE CASCADE d'une bdd oracle par exemple.
    Espérais tu que le ddl d'hibernate te génères ce type de contrainte ?
    Généralement, il est préférable de créer ses tables manuellement avec des scripts car en fonction de ta bdd, Hibernate a parfois tendance à être un peu "fantaisiste" avec les types de tes colonnes.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    peut être n'ai je pas bien compris ce que tu veux dire ou vice versa mais cascade n'est pas spécifique a hibernate.
    Oui je voulais que une fois la bd généré et quand je vérifie sa ddl je trouve cascade inclu.
    même si c'est mieux de créer ses tables manuellement mais dans mon cas, il vaut mieux que ça soit fait avec hibernate (je ne veux pas ).
    Sinon j'ai oublie de signaler que j'ai deja essaye
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    et
    @OnDelete(action = OnDeleteAction.CASCADE).

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par nouraty Voir le message
    peut être n'ai je pas bien compris ce que tu veux dire ou vice versa mais cascade n'est pas spécifique a hibernate.
    Oui je voulais que une fois la bd généré et quand je vérifie sa ddl je trouve cascade inclu.
    même si c'est mieux de créer ses tables manuellement mais dans mon cas, il vaut mieux que ça soit fait avec hibernate (je ne veux pas ).
    Sinon j'ai oublie de signaler que j'ai deja essaye
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    et
    @OnDelete(action = OnDeleteAction.CASCADE).
    Bonjour, j'avoue que je ne saisis pas ta demande, mais comme le dit @NoClassDefFound, le DELETE CASCADE hibernate ne travaille pas du tout sur la structure, et même s'il le permettait il serait fortement déconseillé d'avoir recours à de telles pratiques, sauf dans des cas extrêmes une application ne doit pas avoir à modifier à chaud la structure d'un schéma ou d'une base de donnée,très très mauvaise pratique. Le DELETE CASCADE d'hibernate supprime en cascade tous les enregistrements liés à une autre par un OneToMany par exemple.Bien faire la nuance.Ca reste de la manipulation d'enregistrements, pas de structure.

Discussions similaires

  1. Enregister une image avec Hibernate sans JavaBean
    Par SaladinDev dans le forum Hibernate
    Réponses: 3
    Dernier message: 22/12/2012, 18h54
  2. Réponses: 1
    Dernier message: 23/08/2010, 11h10
  3. Réponses: 0
    Dernier message: 17/06/2009, 14h58
  4. Réponses: 3
    Dernier message: 01/02/2009, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo