2012-12-10 42 views
0

我想了解如何爲從單個表中檢索各個字段的單個select創建映射XML。爲我的多表創建一個hibernate-mapping XML選擇SQL

見下面的SQL(爲簡單起見,我就檢索每個表的所有字段)

SELeCT a.*, b.*, c.*, d.* 
from 
    table1 a, 
    table2 b, 
    table3 c, 
    table4 d 
where 
    a.id = b.id 
    and a.id = c.id (+) 
    and a.code = d.code (+) 
    and a.id = 34 

這裏的表定義。

我的主表是table1,它與table2有1對1的關係。 table1在table3和table4中可能有也可能沒有對應的記錄。表1,表2和表4中的id列具有相同的值。 (例如,如果table1.id = 34和如果表1在表3 AND4的記錄,然後table3.id和table4.id = 34)

table1 (
    id int, 
    code varchar2(255) 
) 

table2 (
    id int, 
    some_column1 varchar2(255) 
    some_column2 varchar2(255) 
) 

table3 (
    code varchar2(255), 
    description varchar(512) 
) 

table3 (
    id int, 
    url varchar(1024) 
) 

我已經讀HQL引物和基本O/R上jboss.org網站,但它並沒有真正告訴我關於如何爲上面的SQL創建一個hibernate映射XML的問題。

謝謝! :)

+0

更適應將ER圖。但我會盡力回答這個問題。 –

+0

這裏沒有ER工具:/但我添加了更多的信息,如果這將有所幫助。我瞭解增加的信息非常簡單,但我希望你能得到這張照片。 – mrjayviper

回答

0

爲Hibernate編寫有效的XML mapping的最佳方式是to read this tutorial

的幾件事情,讀者展示的重點是:

  • XML類映射
  • 關係

如你的例子類型,我們有四個表。應該以某種方式連接。

因此,第一步是爲所有表創建POJO類,爲簡單屬性創建XML映射。

該模型應該看起來像

class A { 
    int id; 
    String code; 
    B b 
    C c; 
    D d; 
} 

class B { 
    int id; 
} 

class C { 
    int id; 
} 

class D { 
    String code; 
} 

映射

A之間加入和B

<one-to-one name="b" class="B">

然後我們映射表C(= a.id b.id( +))

<many-to-one name="c" class="C"/>

我們映射表d(a.code = c.code(+))

<many-to-one name="d" class="D" column="CODE"/>

+0

謝謝。我會嘗試你的建議並閱讀該頁面。 :) – mrjayviper