2009-08-06 19 views
6

Tôi có một lớp học A có một bộ B của. Tuy nhiên, hai đối tượng này được liên kết bởi các trường KHÔNG phải là khóa chính.Hibernate một đến nhiều bằng cách sử dụng một cái gì đó khác với một khóa chính

Đối với B, tôi có thể sử dụng <key column>, nhưng làm cách nào để chỉ định rằng tham gia phải ở trong A. secondary_column? Không phải A. table_primary_key_id?

<class table="a"> 
    <id column="table_primary_key_id"> 
    </id> 
    <property column="secondary_column" /> 

    <set table="B" lazy="false" > 
     <key column="B_not_primary" /> 
     <one-to-many class="BClass" /> 
    </set> 
</class>  
+1

Tôi không nghĩ rằng Hibernate sẽ cho phép bạn làm những gì bạn muốn. – skaffman

+0

Hibernate thực sự KHÔNG NÊN cho phép bạn làm điều này. Điều này reeks của thiết kế cơ sở dữ liệu xấu. Bạn đang cố giải quyết vấn đề gì ở đây? –

+1

Tôi đang cố gắng để giải quyết thiết kế cơ sở dữ liệu xấu ... đó là một cơ sở dữ liệu di sản 10 năm :) Tôi ghét nó, nó ám ảnh tôi. Hy vọng rằng tôi sẽ thuyết phục managemnt thay đổi nó thành một cái gì đó thân thiện hơn với OO. –

Trả lời

4

giải quyết với

<set name="someSet" table="B" lazy="false"> 
    <key column="B_not_primary" property-ref="secondary_column" /> 
    <one-to-many class="BClass" /> 
</set> 
Các vấn đề liên quan