2010-05-20 5 views
2

J'ai des problèmes pour enregistrer de nombreuses relations dans un tableau croisé dynamique.Le mappage plusieurs-à-plusieurs Hibernate n'est pas enregistré dans le tableau croisé dynamique

La façon dont les pojos sont créés est malheureusement un processus assez long qui s'étend sur plusieurs threads différents qui travaillent sur l'objet (jusqu'à présent non sauvegardé) jusqu'à ce qu'il soit finalement conservé. J'associe les objets liés les uns aux autres juste après leur création et lors du débogage, je peux voir la liste des objets liés avec leurs objets respectifs. Donc, tout va bien pour le moment. Quand je persiste l'objet tout est sauvé excepté les relations dans le tableau croisé dynamique.

fichiers de mappage:

<?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 package="com.thebeansgroup.jwinston.plugin.orm.hibernate.object"> 
    <class name="ShowObject" table="show_object"> 
     <id name="id"> 
      <generator class="native" /> 
     </id> 
     <property name="name" /> 
     <set cascade="all" inverse="true" name="venues" table="venue_show"> 
      <key column="show_id"/> 
      <many-to-many class="VenueObject"/> 
     </set> 
    </class> 
</hibernate-mapping> 

et les autres

<?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 package="com.thebeansgroup.jwinston.plugin.orm.hibernate.object"> 
    <class name="VenueObject" table="venue_object"> 
     <id name="id"> 
      <generator class="native"/> 
     </id> 
     <property name="name"/> 
     <property name="latitude" type="integer"/> 
     <property name="longitude" type="integer"/> 
     <set cascade="all" inverse="true" name="shows" table="venue_show"> 
      <key column="venue_id"/> 
      <many-to-many class="ShowObject"/> 
     </set> 
    </class> 
</hibernate-mapping> 

POJO:

public class ShowObject extends OrmObject 
{ 

    private Long id; 
    private String name; 
    private Set venues; 

    public ShowObject() 
    { 
    } 

    public Long getId() 
    { 
     return id; 
    } 

    public void setId(Long id) 
    { 
     this.id = id; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public Set getVenues() 
    { 
     return venues; 
    } 

    public void setVenues(Set venues) 
    { 
     this.venues = venues; 
    } 
} 

et l'autre:

public class VenueObject extends OrmObject 
{ 

    private Long id; 
    private String name; 
    private int latitude; 
    private int longitude; 
    private Set shows = new HashSet(); 

    public VenueObject() 
    { 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() 
    { 
     return id; 
    } 

    public void setId(Long id) 
    { 
     this.id = id; 
    } 

    public int getLatitude() 
    { 
     return latitude; 
    } 

    public void setLatitude(int latitude) 
    { 
     this.latitude = latitude; 
    } 

    public int getLongitude() 
    { 
     return longitude; 
    } 

    public void setLongitude(int longitude) 
    { 
     this.longitude = longitude; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public Set getShows() 
    { 
     return shows; 
    } 

    public void setShows(Set shows) 
    { 
     this.shows = shows; 
    } 
} 

Le problème peut-il être lié au manque d'annotations?

+0

par les deux définitions de classe que vous mettez table = "venue_show" est-ce correct? – Michel

+0

Je l'aurais bien fait, je suppose que l'attribut table spécifie le tableau croisé dynamique. Cependant, je peux me tromper car je suis assez nouveau à Hibernate – luxerama

Répondre

2

choses Couple à essayer:

  1. Vous avez inverse="true" sur les deux extrémités de plusieurs à plusieurs. Ce devrait être seulement à une extrémité.

  2. Rendez vos ensembles non paresseux.

  3. Vous n'avez pas spécifié la propriété column pour l'étiquette plusieurs-à-plusieurs.

Il devrait ressembler à ceci à la fin:

<class name="ShowObject" table="show_object"> 
    ... 
    <set lazy="false" cascade="all" name="venues" table="venue_show"> 
     <key column="show_id"/> 
     <many-to-many class="VenueObject" column="venue_id" /> 
    </set> 
</class> 

<class name="VenueObject" table="venue_object"> 
    ... 
    <set lazy="false" cascade="all" inverse="true" name="shows" table="venue_show"> 
     <key column="venue_id"/> 
     <many-to-many class="ShowObject" column="show_id"/> 
    </set> 
</class> 
+0

Merci beaucoup .... – luxerama

Questions connexes