2016-03-23 32 views
0

我正在製作一個數據庫遷移工具,並且正在處理一個非常笨拙的源數據庫。它基本上是一個超過40-50列的巨大表格。然而,並非所有這些列對我都有用。我只想要他們十幾個人。一旦我獲得了這些數據,我就向Web服務發出請求,該服務將處理遷移目標端的所有內容。我可以擁有一個只映射表的某些列的實體嗎?

我的選項基本上是手動創建查詢來只選擇我想要的列,或者使一個實體映射我想要的列。我對使用JPA並不是很熟悉,所以我不確定這是可能的還是可以的。

我可以這樣做

@Entity 
class SomeEntity{ 

    @Column(name = "ColumnA") 
    private String columnA; 
    @Column(name = "ColumnB") 
    private String columnB; 
} 

如果在數據庫中的列,例如

Column A | Column B | Column C | Column D 

威爾的EclipseLink地圖只有我批註欄還是會抱怨試圖在映射列數據庫到我的實體中不存在的字段?我知道@Transient會標記不應該被保留的字段。但是我想做相反的事情,忽略數據庫列,只將表格部分映射到一個類。

+2

如果它們是隻讀的,那麼您可能只將幾列映射到實體,沒有問題。獲取的只是您在'@ Entity'中聲明的那些列。爲了安全起見,使setter受到保護,以在應用程序級別執行不變性。 –

+0

基本上是的,但是你必須在任何情況下定義一個@Id'(或等價物)。無需在數據庫級別創建視圖,就像在接受的答案中所建議的那樣。 – stg

回答

1

你應該創建一個視圖。讓視圖擁有您認爲相關的許多colums。將這些列定義爲類中的字段,並像往常一樣將它們與Hibernate註釋連接起來。但請注意,您只能在視圖上執行選擇,因此插入/更新/刪除不在問題中。

+0

巨大的表是隻讀的,所以只執行選擇是好的。你可以詳細說明一個觀點是什麼?我上面的例子會發生什麼? – JMD83

+1

@ JMD83 wiews是在數據庫級別創建的,除非必須連接某些表,否則您確實不需要它們。 –

相關問題