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 :

Problème de cascade avec Hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut Problème de cascade avec Hibernate
    Tout d'abord, bonjour à tous!!!
    Il s'agit là de mon premier message sur le forum developpez.net. J'espère que vous pourrez m'aider et pouvoir aider à mon tour.

    Je vous expose mon problème.

    J'ai créé une base et un mapping hibernate via hibernate tools mais je ne parviens pas a effectuer des ajouts en cascade. Par exemple, j'ai une table theme et une table image. Ces deux tables sont liées par une relation de type many-to-many porteuse d'un attribut.

    Précision: j'utilise Spring

    Voici le script de création des tables:
    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
     
    CREATE TABLE orientation (
    idOrientation int not null auto_increment,
    libelleOrientation varchar(20) not null,
    PRIMARY KEY(idOrientation)
    )Type=InnoDB;
     
    CREATE TABLE image (
    idImage int not null auto_increment, 
    nomImage varchar(50) not null,
    cheminImage varchar(200) not null,
    descriptionImage varchar(200),
    idOrientation int not null,
    PRIMARY KEY(idImage),
    CONSTRAINT FK_theme_idOrientation FOREIGN KEY (idOrientation) REFERENCES orientation (idOrientation),
    UNIQUE(nomImage, cheminImage)
    )Type=InnoDB;  
     
    CREATE TABLE theme (
    idTheme int not null auto_increment, 
    libelleTheme varchar(50) not null, 
    PRIMARY KEY(idTheme),
    UNIQUE(libelleTheme)
    )Type=InnoDB;
     
    CREATE TABLE image_theme(
    idImage int not null,
    idTheme int not null,
    isPrincipale boolean not null,
    PRIMARY KEY(idImage, idTheme),
    CONSTRAINT FK_image_theme_idImage FOREIGN KEY (idImage) REFERENCES image (idImage),
    CONSTRAINT FK_image_theme_idTheme FOREIGN KEY (idTheme) REFERENCES theme (idTheme)
    )Type=InnoDB;




    Voici maintenant les fichiers de mapping générés par Hibernate Tools:

    Image.hbm.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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA -->
    <hibernate-mapping>
        <class name="com.dawns.studio.javabeans.Image" table="image" catalog="dawnsstudio">
            <id name="idImage" type="java.lang.Integer">
                <column name="idImage" />
                <generator class="increment" />
            </id>
            <many-to-one name="orientation" class="com.dawns.studio.javabeans.Orientation" fetch="select">
                <column name="idOrientation" not-null="true" />
            </many-to-one>
            <property name="nomImage" type="string">
                <column name="nomImage" length="50" not-null="true" />
            </property>
            <property name="cheminImage" type="string">
                <column name="cheminImage" length="200" not-null="true" />
            </property>
            <property name="descriptionImage" type="string">
                <column name="descriptionImage" length="200" />
            </property>
            <set name="imageGaleries" inverse="true" lazy="true" table="image_galerie" fetch="select">
                <key>
                    <column name="idImage" not-null="true" />
                </key>
                <one-to-many class="com.dawns.studio.javabeans.ImageGalerie" />
            </set>
            <set name="imageThemes" inverse="true" lazy="true" table="image_theme" fetch="select">
                <key>
                    <column name="idImage" not-null="true" />
                </key>
                <one-to-many class="com.dawns.studio.javabeans.ImageTheme" />
            </set>
        </class>
    </hibernate-mapping>
    Theme.hbm.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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA -->
    <hibernate-mapping>
        <class name="com.dawns.studio.javabeans.Theme" table="theme" catalog="dawnsstudio">
            <id name="idTheme" type="java.lang.Integer">
                <column name="idTheme" />
                <generator class="increment" />
            </id>
            <property name="libelleTheme" type="string">
                <column name="libelleTheme" length="50" not-null="true" unique="true" />
            </property>
            <set name="galeries" inverse="true" lazy="true" table="galerie" fetch="select">
                <key>
                    <column name="idTheme" not-null="true" />
                </key>
                <one-to-many class="com.dawns.studio.javabeans.Galerie" />
            </set>
            <set name="imageThemes" inverse="true" lazy="true" table="image_theme" fetch="select">
                <key>
                    <column name="idTheme" not-null="true" />
                </key>
                <one-to-many class="com.dawns.studio.javabeans.ImageTheme" />
            </set>
        </class>
    </hibernate-mapping>
    ImageTheme.hbm.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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA -->
    <hibernate-mapping>
        <class name="com.dawns.studio.javabeans.ImageTheme" table="image_theme" catalog="dawnsstudio">
            <composite-id name="id" class="com.dawns.studio.javabeans.ImageThemeId">
                <key-many-to-one name="image" class="com.dawns.studio.javabeans.Image">
                    <column name="idImage" />
                </key-many-to-one>
                <key-many-to-one name="theme" class="com.dawns.studio.javabeans.Theme">
                    <column name="idTheme" />
                </key-many-to-one>
            </composite-id>
            <property name="isPrincipale" type="boolean">
                <column name="isPrincipale" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>


    Voici maintenant les classes générées:

    Image.java
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    package com.dawns.studio.javabeans;
     
    // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA
     
    import java.util.HashSet;
    import java.util.Set;
     
    /**
     * Image generated by hbm2java
     */
    public class Image implements java.io.Serializable {
     
    	private static final long serialVersionUID = 1L;
    	private Integer idImage;
    	private Orientation orientation;
    	private String nomImage;
    	private String cheminImage;
    	private String descriptionImage;
    	private Set<ImageGalerie> imageGaleries = new HashSet<ImageGalerie>(0);
    	private Set<ImageTheme> imageThemes = new HashSet<ImageTheme>(0);
     
    	public Image() {
    	}
     
    	public Image(Orientation orientation, String nomImage, String cheminImage) {
    		this.orientation = orientation;
    		this.nomImage = nomImage;
    		this.cheminImage = cheminImage;
    	}
     
    	public Image(Orientation orientation, String nomImage, String cheminImage,
    			String descriptionImage, Set<ImageGalerie> imageGaleries, Set<ImageTheme> imageThemes) {
    		this.orientation = orientation;
    		this.nomImage = nomImage;
    		this.cheminImage = cheminImage;
    		this.descriptionImage = descriptionImage;
    		this.imageGaleries = imageGaleries;
    		this.imageThemes = imageThemes;
    	}
     
    	public Integer getIdImage() {
    		return this.idImage;
    	}
     
    	public void setIdImage(Integer idImage) {
    		this.idImage = idImage;
    	}
     
    	public Orientation getOrientation() {
    		return this.orientation;
    	}
     
    	public void setOrientation(Orientation orientation) {
    		this.orientation = orientation;
    	}
     
    	public String getNomImage() {
    		return this.nomImage;
    	}
     
    	public void setNomImage(String nomImage) {
    		this.nomImage = nomImage;
    	}
     
    	public String getCheminImage() {
    		return this.cheminImage;
    	}
     
    	public void setCheminImage(String cheminImage) {
    		this.cheminImage = cheminImage;
    	}
     
    	public String getDescriptionImage() {
    		return this.descriptionImage;
    	}
     
    	public void setDescriptionImage(String descriptionImage) {
    		this.descriptionImage = descriptionImage;
    	}
     
    	public Set<ImageGalerie> getImageGaleries() {
    		return this.imageGaleries;
    	}
     
    	public void setImageGaleries(Set<ImageGalerie> imageGaleries) {
    		this.imageGaleries = imageGaleries;
    	}
     
    	public Set<ImageTheme> getImageThemes() {
    		return this.imageThemes;
    	}
     
    	public void setImageThemes(Set<ImageTheme> imageThemes) {
    		this.imageThemes = imageThemes;
    	}
     
    }
    Theme.java
    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
     
    package com.dawns.studio.javabeans;
     
    // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA
     
    import java.util.HashSet;
    import java.util.Set;
     
    /**
     * Theme generated by hbm2java
     */
    public class Theme implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private Integer idTheme;
    	private String libelleTheme;
    	private Set<Galerie> galeries = new HashSet<Galerie>(0);
    	private Set<ImageTheme> imageThemes = new HashSet<ImageTheme>(0);
     
    	public Theme() {
    	}
     
    	public Theme(String libelleTheme) {
    		this.libelleTheme = libelleTheme;
    	}
     
    	public Theme(String libelleTheme, Set<Galerie> galeries, Set<ImageTheme> imageThemes) {
    		this.libelleTheme = libelleTheme;
    		this.galeries = galeries;
    		this.imageThemes = imageThemes;
    	}
     
    	public Integer getIdTheme() {
    		return this.idTheme;
    	}
     
    	public void setIdTheme(Integer idTheme) {
    		this.idTheme = idTheme;
    	}
     
    	public String getLibelleTheme() {
    		return this.libelleTheme;
    	}
     
    	public void setLibelleTheme(String libelleTheme) {
    		this.libelleTheme = libelleTheme;
    	}
     
    	public Set<Galerie> getGaleries() {
    		return this.galeries;
    	}
     
    	public void setGaleries(Set<Galerie> galeries) {
    		this.galeries = galeries;
    	}
     
    	public Set<ImageTheme> getImageThemes() {
    		return this.imageThemes;
    	}
     
    	public void setImageThemes(Set<ImageTheme> imageThemes) {
    		this.imageThemes = imageThemes;
    	}
     
    }
    ImageTheme.java
    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
     
    package com.dawns.studio.javabeans;
     
    // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA
     
    /**
     * ImageTheme generated by hbm2java
     */
    public class ImageTheme implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private ImageThemeId id;
    	private boolean isPrincipale;
     
    	public ImageTheme() {
    	}
     
    	public ImageTheme(ImageThemeId id, boolean isPrincipale) {
    		this.id = id;
    		this.isPrincipale = isPrincipale;
    	}
     
    	public ImageThemeId getId() {
    		return this.id;
    	}
     
    	public void setId(ImageThemeId id) {
    		this.id = id;
    	}
     
    	public boolean isIsPrincipale() {
    		return this.isPrincipale;
    	}
     
    	public void setIsPrincipale(boolean isPrincipale) {
    		this.isPrincipale = isPrincipale;
    	}
     
    }
    ImageThemeId.java
    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
    70
     
    package com.dawns.studio.javabeans;
     
    // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA
     
    /**
     * ImageThemeId generated by hbm2java
     */
    public class ImageThemeId implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private Image image;
    	private Theme theme;
     
    	public ImageThemeId() {
    	}
     
    	public ImageThemeId(Image image, Theme theme) {
    		this.image = image;
    		this.theme = theme;
    	}
     
    	public Image getImage() {
    		return this.image;
    	}
     
    	public void setImage(Image image) {
    		this.image = image;
    	}
     
    	public Theme getTheme() {
    		return this.theme;
    	}
     
    	public void setTheme(Theme theme) {
    		this.theme = theme;
    	}
     
    	public boolean equals(Object other) {
    		if ((this == other))
    			return true;
    		if ((other == null))
    			return false;
    		if (!(other instanceof ImageThemeId))
    			return false;
    		ImageThemeId castOther = (ImageThemeId) other;
     
    		return ((this.getImage() == castOther.getImage()) || (this.getImage() != null
    				&& castOther.getImage() != null && this.getImage().equals(
    				castOther.getImage())))
    				&& ((this.getTheme() == castOther.getTheme()) || (this
    						.getTheme() != null
    						&& castOther.getTheme() != null && this.getTheme()
    						.equals(castOther.getTheme())));
    	}
     
    	public int hashCode() {
    		int result = 17;
     
    		result = 37 * result
    				+ (getImage() == null ? 0 : this.getImage().hashCode());
    		result = 37 * result
    				+ (getTheme() == null ? 0 : this.getTheme().hashCode());
    		return result;
    	}
     
    }

    Et pour finir, voici ma classe de test:

    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
     
    package com.tests;
     
    import java.util.HashSet;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
     
    import com.dawns.studio.javabeans.Image;
    import com.dawns.studio.javabeans.ImageTheme;
    import com.dawns.studio.javabeans.ImageThemeId;
    import com.dawns.studio.javabeans.Orientation;
    import com.dawns.studio.javabeans.Theme;
    import com.dawns.studio.service.ThemeService;
     
     
    public class Test {
     
    	public static void main(String[] args) {
    		ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\StudioPhoto\\WEB-INF\\src\\applicationContext.xml");
     
    		Theme t  = new Theme();
    		t.setLibelleTheme("Test3");
     
    		Image i = new Image();
    		i.setNomImage("Test3");
    		i.setCheminImage("Test3");
    		i.setOrientation(new Orientation("Paysage"));
     
    		ImageThemeId imgThId = new ImageThemeId();
    		imgThId.setImage(i);
    		imgThId.setTheme(t);
    		ImageTheme imgTh = new ImageTheme();
    		imgTh.setIsPrincipale(true);
    		imgTh.setId(imgThId);
     
    		HashSet<ImageTheme> hash = new HashSet<ImageTheme>();
    		hash.add(imgTh);
    		t.setImageThemes(hash);
     
    		ThemeService manager = ((ThemeService) ctx.getBean("themeService1"));
     
    		manager.saveTheme(t);
    	}
     
    }
    En laissant le tout tel quel, mon theme est persisté, mais la table de relation et l'image ne sont pas créés. J'ai essayé d'ajouter un cascade="all" sur le set lié à la table de relation au niveau du fichier de mapping de la table theme et dans ce cas, j'obtiens une exception accompagnée associée à un message persist failed.

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par bouvetj Voir le message
    J'ai essayé d'ajouter un cascade="all" sur le set lié à la table de relation au niveau du fichier de mapping de la table theme et dans ce cas, j'obtiens une exception accompagnée associée à un message persist failed.

    Merci de votre aide.
    On aimerais bien voir ce message et son stacktrace

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    On aimerais bien voir ce message et son stacktrace
    Merci de votre réponse, voici un peu plus bas la stackTrace.
    En fait je suis parvenu à écrire ce que je voulais en base mais pas de la manière dont je le souhaite.

    En fait, je souhaiterai savoir une chose.

    Mon objet Theme possède une liste d'image et un libellé.

    En développant la méthode de mon service de la manière qui suit, je parviens à écrire toutes les données correctement:

    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
     
    public void saveTheme(Theme theme){
    		if(theme.getIdTheme() == null || theme.getIdTheme() == 0)
    			this.themeDAO.attachDirty(theme);
    		else
    			this.themeDAO.merge(theme);
     
    		Iterator i=theme.getImageThemes().iterator(); // on crée un Iterator pour parcourir notre HashSet
    		while(i.hasNext()) // tant qu'on a un suivant
    		{
    			ImageTheme imageTheme = (ImageTheme) i.next();
    			Image image = imageTheme.getId().getImage();
    			this.imageDAO.attachDirty(image);
    			this.imageThemeDAO.attachDirty(imageTheme);
    		}
     
    	}
    Ce que je voudrai savoir c'est si avec une utilisation en cascade, les objets correspondants a ma table de relation peuvent être insérés directement lorsque je persiste mon objet Theme ou bien si je suis obligé de faire moi même le parcours du set pour persister les données dans la table Image et dans la table de relation.

    Merci beaucoup pour votre aide.




    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    10 déc. 2009 10:36:15 com.dawns.studio.dao.hibernate.ThemeDAOHibernate attachDirty
    GRAVE: attach failed
    java.lang.NullPointerException
    	at org.hibernate.type.AbstractType.getHashCode(AbstractType.java:136)
    	at org.hibernate.type.AbstractType.getHashCode(AbstractType.java:144)
    	at org.hibernate.type.EntityType.getHashCode(EntityType.java:312)
    	at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:212)
    	at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:126)
    	at org.hibernate.engine.EntityKey.<init>(EntityKey.java:70)
    	at org.hibernate.engine.StatefulPersistenceContext.getDatabaseSnapshot(StatefulPersistenceContext.java:263)
    	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:212)
    	at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:535)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:103)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
    	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:320)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:266)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:243)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
    	at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
    	at com.dawns.studio.dao.hibernate.ThemeDAOHibernate.attachDirty(ThemeDAOHibernate.java:37)
    	at com.dawns.studio.service.impl.ThemeServiceImpl.saveTheme(ThemeServiceImpl.java:33)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy10.saveTheme(Unknown Source)
    	at com.dawns.tests.Test.main(Test.java:55)
    java.lang.NullPointerException
    	at org.hibernate.type.AbstractType.getHashCode(AbstractType.java:136)
    	at org.hibernate.type.AbstractType.getHashCode(AbstractType.java:144)
    	at org.hibernate.type.EntityType.getHashCode(EntityType.java:312)
    	at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:212)
    	at org.hibernate.engine.EntityKey.generateHashCode(EntityKey.java:126)
    	at org.hibernate.engine.EntityKey.<init>(EntityKey.java:70)
    	at org.hibernate.engine.StatefulPersistenceContext.getDatabaseSnapshot(StatefulPersistenceContext.java:263)
    	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:212)
    	at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:535)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:103)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
    	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:320)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:266)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:243)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
    	at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
    	at com.dawns.studio.dao.hibernate.ThemeDAOHibernate.attachDirty(ThemeDAOHibernate.java:37)
    	at com.dawns.studio.service.impl.ThemeServiceImpl.saveTheme(ThemeServiceImpl.java:33)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy10.saveTheme(Unknown Source)
    	at com.dawns.tests.Test.main(Test.java:55)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    C'est bon j'ai réussi à faire ce que je voulais, par contre il me reste un petit problème.

    Quand je persiste un objet Theme avec un Set d'objets correspondants à ma relation. Si j'essaie d'ajouter en cascade, j'ai un problème: Comment faire pour que les id (s) dans la table de relation correspondent aux id de mes 2 objets qui doivent être mis en relation. Car je suis obligé de les renseigner pour créer mon objet. Et vu qu'ils sont créés par incrémentation, je ne possède pas encore ces id au moment de générer l'objet.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Par défaut
    Alors tu as une méthode pour récupérer les id générés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    taSession.flush();
    int in = taSession.getIdentifier(tonObjet);
    Mais je pense pas que ce soit la solution la plus simple.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    au niveau java, ta classe Relation n'utilisera pas les id, mais les instance des objets dont tu veux les ids, c'est hibernante qui lors du mapping se chargera de sauver les ids dans la table.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Merci pour votre aide j'ai réussi à contourner le problème!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'initialisation avec Hibernate
    Par fabou3377 dans le forum NetBeans
    Réponses: 3
    Dernier message: 03/04/2009, 06h41
  2. problème de supression avec Hibernate
    Par ygrim dans le forum Hibernate
    Réponses: 5
    Dernier message: 30/01/2008, 17h16
  3. Problème requete SQL avec hibernate
    Par kakahn dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/01/2008, 12h08
  4. Problème de synchronisation avec Hibernate
    Par toutoune60 dans le forum JSF
    Réponses: 2
    Dernier message: 15/04/2007, 12h27
  5. Problème de connection avec Hibernate Synchronizer
    Par ouzzine dans le forum Hibernate
    Réponses: 8
    Dernier message: 30/11/2006, 13h51

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