2009-05-14 7 views
7

Ho un mapping @ManyToMany in cui la tabella fa riferimento a una tabella di mappatura e vogliamo ordinare su un ID ordine nella tabella di mappatura effettiva, ma trovo difficile configurarlo .Ordinamento in base al valore della tabella di mappatura in Hibernate

Possiamo eseguirlo in hibernate xml, quindi è naturale supporre che il supporto sia presente nelle annotazioni JPA. Qualcuno sa come possiamo ordinare un valore nella tabella di mappatura?

La tabella è:

wap_site_components 

intid 
strname 
intcomponentdef 
dtmcreated  
intcustomer 

e la tabella di mapping che l'auto-riferimenti è:

wap_site_component_relations 

intid  
intparent (references intid in wap_site_components) 
intchild (references intid in wap_site_components) 
intorder (this is the value we want to order the collection on) 

In Hibernate Annotazioni abbiamo:

@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinTable (name = "wap_site_component_relations", 
    joinColumns = {@JoinColumn (name = "intparent", referencedColumnName = "id") }, 
    inverseJoinColumns = {@JoinColumn (name = "intchild", referencedColumnName = "id") }) 
public Set<WapComponent> getChildren() { 
    return children; 
} 

Questo è il modo ci siamo esibiti in hibernate xml:

 <set 
      name="children" 
      table="wap_site_component_relations" 
      lazy="true" 
      cascade="none" 
      sort="unsorted" 
      order-by="intorder" 
      mutable="false" 
     > 
      <cache 
      usage="read-only" 
      /> 

      <key 
      column="intparent" 
      > 
      </key> 

      <many-to-many 
      class="se.plusfoursix.im46.data.wap.WapComponent" 
      column="intchild" 
      outer-join="auto" 
      /> 

     </set> 

Quindi vogliamo utilizzare il tag @OrderBy ma non possiamo fare riferimento al valore intorder nella tabella di mapping. Qualche idea? Grazie.

(abbiamo cercato un @OrderBy (intorder) sulla raccolta dei bambini nel codice, ma che non ha funzionato per noi)

+1

Vorrei anche aggiungere che potremmo fare questo facendo la tabella di mappatura un fagiolo, ma preferirei non farlo. – bowsie

risposta

0

Abbiamo finito con la creazione della tabella di mapping come bean.

Se qualcuno ha un modo di eseguire quanto sopra senza che, sarebbe ancora felice di sentire da voi!

+0

Ho riscontrato lo stesso problema e ho fatto ricorso alla soluzione allo stesso modo. – Heathen

+0

Questo è sconfortante. –

2

è possibile creare un oggetto con annotazioni per rappresentare la tabella di collegamento, quindi utilizzare @OneToMany per mappare dal padre per il Childlink e poi al bambino

@Entity 
public class Parent { 
    @id 
    Long id; 

    @OneToMany(targetEntity = ChildLink.class) 
    Set<ChildLink> childLinks; 
} 

public class ChildLink { 

    @Id 
    @OrderBy 
    Long orderBy; 

    @ManyToOne 
    Set<Parent> parents; 

    @ManyToOne 
    Set<Child> children; 
} 

Solo un esempio di massima. È quindi possibile produrre in modo programmatico i set figli dall'insieme di childlink, forse nel metodo getChildren della classe genitore.

Problemi correlati