0

我有3個表:映射在多個表

TABLE BOOKING (
    BOOK_ID 
    PERSONAL_ID        
    ORGINIZER      
    TITLE 
    PRIMARY KEY (BOOK_ID) 
    FOREIGN KEY (PERSONAL_ID) 
); 

TABLE ROOM 
(
    ID 
    BOOK_ID 
    FROM     
    UNTIL       
    QUANTITY     
    PRIMARY KEY (ID) 
    FOREIGN KEY (BOOK_ID) 
); 

TABLE PERSONAL 
    (
     ID 
     PERSONAL_ID 
     NAME 
     SURNAME 
     EMAIL   
     PRIMARY KEY (ID) 
    ); 

我映射了像表ROOM:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 

<class name="Depp.Domain.Booking, Depp.Core" > 
    <id name="ID" unsaved-value="0" column="ID"> 
     <generator class="native"> 
      <!--<param name="sequence">GLOBALSEQUENCE</param>--> 
     </generator> 
    </id> 
    <property name="Title" ></property> 
    <property name="TitleEnabled" type="yes_no"> 
     <column name="THEMA_ENABLED"/> 
    </property> 
    <property name="ORGANIZER" column="PERSONAL_ID" not-null="true" ></property> 
    <bag name="ROOM" inverse="true" lazy="true" cascade="all-delete-orphan" > 
     <key column="BOOK_ID"/> 
     <one-to-many class="Depp.Domain.ROOM, Depp.Core"/> 
    </bag> 

</class> 

我的問題是如何能夠映射在表PERSONAL?我的問題是PERSONAL沒有FOREIGN KEY,所以我不知道如何通過PERSONAL來映射。我需要從該表中獲取NAME,SURNAMEEMAIL

希望有人能幫助我

謝謝!

回答

0

如何使用HQL獲取該表對象的列表?要獲得映射的對象,必須有FK定義是不是,否則hibernate將如何映射列?

+0

訂票主表。我可以在ROOM上映射,因爲ROOM具有FK「BOOK_ID」。但我不能映射到個人,因爲該表沒有FK「BOOK_ID」。但是BOOKING表具有FK「PERSONAL_ID」。是否可以從PERSONAL表中獲取名稱,姓氏和電子郵件,並在BOOKING表中使用「PERSONAL_ID」? – Paks 2012-08-03 06:35:39

+0

但personal_id出現在兩個表中,你可以使用任何值isnt嗎? – mrd081 2012-08-03 08:51:17

+0

是兩個表中都存在Personal_id。 – Paks 2012-08-03 09:07:40

2

Booking和Personal之間的關聯可以映射爲unidirectional many-to-one association

使用property-ref屬性來指定要加入的個人主鍵以外的字段,在您的情況下,它是與數據庫列PERSONAL_ID對應的personalId屬性,而不是Personal類的ID。

property-ref(可選)

已加入到這個外鍵關聯 類的屬性的名稱。如果未指定,則使用關聯類的主鍵 。

查看Hibernate - why use many-to-one to represent a one-to-one?

映射這個計算器問題

<class name="Booking" > 
    <id name="ID" unsaved-value="0" column="ID"> 
     <generator class="native"> 
      <!--<param name="sequence">GLOBALSEQUENCE</param>--> 
     </generator> 
    </id> 
    ... 
    <many-to-one name="personal" column="PERSONAL_ID" property-ref="personalId" not-null="true"/> 
    ... 
</class> 

<class name="Personal"> 
    <id name="id" column="ID"> 
     <generator class="native"/> 
    </id> 

    <property name="personalId" column="personal_id" /> 
    <property name="name" /> 
    <property name="surname" /> 
    <property name="email" /> 

</class> 

的Java

public class Booking{ 

    private Long id; 

    private Personal personal; 
    ... 
} 



public class Personal 
{ 
    Long id; 

    private Long personalId; 
    private String name;   
    private String surname; 
    private String email; 
} 
+0

這不適合我。我嘗試過,但每次我設置多對一的關係或類個人我的網站崩潰。不知道爲什麼。 – Paks 2012-08-06 20:15:57

+0

使用property-ref,因爲您不想加入個人表的主鍵ID,而是加入PERSONAL_ID列。我修改答案。 – 2012-08-06 23:11:35