2012-12-10 48 views
1

我有兩張表,我想在Hibernate/Spring中將它視爲單個模型類,但是他們唯一的關係可以通過第三個表建立。例如...在單個模型中的第三個表上連接兩個表Hibernate Spring

tableA { 
    id integer <PK> 
    username varchar2(25 byte) 
} 
tableB { 
    personID varchar2(15 byte) <PK> 
    divisionID integer 
    positionID integer 
} 
tableC { 
    personID varchar2(10) <FK> 
    username varchar2(25 byte) 
} 

雖然這將是非常好的,簡單的添加PERSONID作爲tableA的列,情況不允許。我會,不過,想與這些表在Hibernate中使用一個模型,比如下面的一個互動......

@Entity 
@Table(name="tableA") 
public class myTable { 
    @Id 
    @GeneratedValue 
    private int id; 
    private String username; 
    @Formula("(select distinct tableC.personID from tableC where upper(tableC.username) = upper(THIS_.username) and tableC.personID is not null)") 
    String personID; 
    @Formula("(select distinct tableB.divisionID from tableB where tableB.personID = THIS_.personID)") 
    int divisionID; 
    @Formula("(select distinct tableB.oositionID from tableB where tableB.personID = THIS_.personID)") 
    int positionID; 

    //getters, setters, etc... 
} 

我知道,我已經在這裏寫的方式是不可能的,我只是想傳達這個想法。當我稍後保存或更新數據庫時,我希望Hibernate能夠更新每個屬性出現的相應表。

我已經探索過使用@Transient,@SecondaryTables和其他幾個,但我還沒有找到一個好方法來完成這項工作。是否有可能以我想要的方式做到這一點?如果是這樣,我應該使用什麼方法/註釋?如果不是,我應該採取什麼替代方法?我對Hibernate和Spring相對來說比較新,所以請耐心等待。

回答

0

我相信有一種方法可以做到這一點;我沒有你的答案。

但是你的問題告訴我,你沒有正確地思考Hibernate。這是一個ORM工具 - 對象-關係映射。如果你仍然只考慮表和SQL,將值加載到基元中,那麼Hibernate並不是正確的工具。

如果你沒有對象來映射數據,我建議只使用Spring SimpleJdbcTemplate而不是Hibernate。

+0

在試圖讓我的問題那麼簡單,我可能過於簡化。這只是Hibernate迄今非常有用的一個更大的Web應用程序的一個組件。 – hartz89

+0

你不必爲所有事情都使用Hibernate。如果你沒有映射到你的域中的模型對象,我會說Hibernate不適用。 – duffymo

相關問題