2013-03-07 92 views
0

好的問題是,我有一個應用程序,使查詢不同的數據庫,和一些實體有丟失的列。有沒有辦法忽略丟失的列而不使用繼承?休眠忽略列如果不存在

+2

爲了改善您的問題,提供了您所嘗試的細節(一個* small *示例的映射/類/表),爲什麼它不起作用可能包括錯誤消息的示例。 – Gus 2013-03-07 20:20:56

+0

我有同樣的問題。我通過創建一個註解爲MappedSuperclass的主類來解決該問題,該類包含所有可用的屬性。然後我創建了兩個入門課程。第一個被標記爲沒有自己的字段,第二個包含字段,只在一個可用的DB中。該解決方案使用繼承。但我希望它能幫助別人。 – Jens876 2015-04-09 09:30:21

回答

6

有根據您的需求不同的可能性:

  1. 如果您再也不需要這些額外的列,其只存在於某些數據庫,那麼你根本不是在映射定義它們(或在註解)。然後它們永遠不會被Hibernate讀取,並且在插入時列將被設置爲null(如果您希望值不同於null,則可以在數據庫中定義默認值或觸發器)。

  2. 如果你需要額外的列時,你需要不同的映射不同的數據庫。對於這種情況,最好使用xml映射文件。無論如何,每個數據庫都有一個單獨的hibernate.cfg.xml文件(連接字符串在那裏)。在這裏爲不同列的表格指定不同的映射文件(標籤<mapping resource="..." />)。 Java pojo,我。即Java類對於所有數據庫都是相同的,並且它包含任何數據庫上存在的所有列,但是在數據庫特定映射文件中,只將這些列映射到該數據庫中真正存在的Java成員。 (有了註釋,這很煩人,因爲那麼你需要針對不同的數據庫使用不同的Java類,並且必須處理代碼中的邏輯。)

  3. 如果表是隻讀的,那麼可以在該表上定義數據庫視圖讓這個視圖提供缺少的列與默認值。然後在Hibernate中映射視圖而不是表格。