2009-05-14 60 views
7

Tôi có ánh xạ @ManyToMany nơi bảng tự tham chiếu qua bảng ánh xạ và chúng tôi muốn đặt hàng trên id đơn đặt hàng trong bảng ánh xạ thực tế, nhưng thấy khó cấu hình .Sắp xếp theo giá trị bảng ánh xạ trong Hibernate

Chúng tôi có thể thực hiện nó trong xml ngủ đông, do đó, tự nhiên cho rằng sự hỗ trợ có trong chú thích JPA. Có ai biết làm thế nào chúng ta có thể đặt hàng trên một giá trị trong bảng lập bản đồ?

bảng là:

wap_site_components 

intid 
strname 
intcomponentdef 
dtmcreated  
intcustomer 

và bảng vẽ bản đồ mà tự tài liệu tham khảo là:

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) 

Trong Hibernate Chú thích chúng ta có:

@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; 
} 

Đây là cách chúng tôi thực hiện trong 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> 

Vì vậy, chúng tôi muốn sử dụng thẻ @OrderBy nhưng không thể tham chiếu giá trị intorder trong bảng ánh xạ. Bất kỳ ý tưởng? Cảm ơn.

(Chúng tôi đã cố gắng một @OrderBy (intorder) trong bộ sưu tập trẻ em trong mã nhưng điều đó không làm việc ra cho chúng ta)

+1

Tôi cũng nên thêm ở đây rằng chúng ta có thể làm điều này bằng cách làm cho bảng vẽ bản đồ một bean, nhưng không muốn làm điều này. – bowsie

Trả lời

0

Chúng tôi đã chỉ tạo bảng ánh xạ làm bean.

Nếu có ai đó có cách thực hiện ở trên mà không có điều đó, vẫn vui lòng nhận được thông tin từ bạn!

+0

Tôi đã gặp phải vấn đề tương tự và đã sử dụng để giải quyết cùng một cách. – Heathen

+0

Đã không đạt phong độ tốt trong ngày hôm nay. –

2

Bạn có thể tạo một đối tượng chú thích để đại diện cho bảng liên kết, sau đó sử dụng @oneToMany để ánh xạ từ cha mẹ đến childlink và sau đó đến con

@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; 
} 

Chỉ cần một ví dụ thô. Sau đó bạn có thể lập trình sản xuất các tập con từ tập hợp các childLinks, có lẽ trong phương thức getChildren của lớp cha.

Các vấn đề liên quan