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