2012-03-18 24 views
1

我在我的實體類中定義了連接。當我做查詢時,連接實體也會返回。是否可以停止jpa中的連接?

是否有可能停止這些連接或者它們總是會發生?在某些情況下,我想阻止它們發生,這樣我就不會在我的傳輸對象中傳輸不必要的關聯實體。或者是剝離你只需要傳輸對象的做法?

感謝

回答

1

如果您不需要獲取每個請求的所有連接的實體,您可以使用延遲抓取。 此提取參數可以添加到註釋中:@Basic,@OneToMany,@ManyToOne,@OneToOne和@ManyToMany。

例如@ManyToOne(fetch = FetchType.LAZY)

通過設置FetchType.LAZY,您不會從數據庫中檢索所有連接的字段,直到它們被顯式訪問。

+0

謝謝。當我檢查集合的關聯對象沒有加載,但是當我將集合添加到響應實體時,我認爲它必須自動訪問關聯的實體,因爲響應仍會返回所有內容。我是否必須顯式設置傳輸對象並使用類似BeanUtils.Copy的方法來阻止這種情況的發生?再次感謝。 – skinnybrit51 2012-03-18 16:08:52

+0

這可能是一個解決方案。如果您在應用程序的任何位置根本不使用鏈接的實體,那麼您可能只需省略相關JPA實體Bean中不需要的屬性。 – stzoannos 2012-03-19 09:21:02

1

更好的方法是創建一個新的Transfer Object並從數據庫中獲取該對象。因此,對於例如:如果你有Person類,你需要它的一些特性的轉移,可考慮做以下

原始Person類會看一些東西一樣

Class Person { 
    private String firstName; 
    private String lastName; 
    Private Set<User> users 
} 

創建一個新的類,這將是你的傳遞對象,假設你只需要傳遞一些人類的屬性。

Class PersonDTO { 
    private String firstName; 
    private String lastName; 

    public PersonDTO(String firstName, String lastName){ 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

現在你可以寫你的查詢作爲

Select new PersonDTO(firstName, lastName) from Person p; 

注意:在PersonDTO對應的構造是很重要的。

希望這會有所幫助。

+0

你將如何擴展這種模式以在更多領域工作?繼續向構造函數添加所需的字段似乎不太合適。 – skinnybrit51 2012-03-21 22:14:58

相關問題