我在我的實體類中定義了連接。當我做查詢時,連接實體也會返回。是否可以停止jpa中的連接?
是否有可能停止這些連接或者它們總是會發生?在某些情況下,我想阻止它們發生,這樣我就不會在我的傳輸對象中傳輸不必要的關聯實體。或者是剝離你只需要傳輸對象的做法?
感謝
我在我的實體類中定義了連接。當我做查詢時,連接實體也會返回。是否可以停止jpa中的連接?
是否有可能停止這些連接或者它們總是會發生?在某些情況下,我想阻止它們發生,這樣我就不會在我的傳輸對象中傳輸不必要的關聯實體。或者是剝離你只需要傳輸對象的做法?
感謝
如果您不需要獲取每個請求的所有連接的實體,您可以使用延遲抓取。 此提取參數可以添加到註釋中:@Basic,@OneToMany,@ManyToOne,@OneToOne和@ManyToMany。
例如@ManyToOne(fetch = FetchType.LAZY)
通過設置FetchType.LAZY,您不會從數據庫中檢索所有連接的字段,直到它們被顯式訪問。
更好的方法是創建一個新的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對應的構造是很重要的。
希望這會有所幫助。
你將如何擴展這種模式以在更多領域工作?繼續向構造函數添加所需的字段似乎不太合適。 – skinnybrit51 2012-03-21 22:14:58
謝謝。當我檢查集合的關聯對象沒有加載,但是當我將集合添加到響應實體時,我認爲它必須自動訪問關聯的實體,因爲響應仍會返回所有內容。我是否必須顯式設置傳輸對象並使用類似BeanUtils.Copy的方法來阻止這種情況的發生?再次感謝。 – skinnybrit51 2012-03-18 16:08:52
這可能是一個解決方案。如果您在應用程序的任何位置根本不使用鏈接的實體,那麼您可能只需省略相關JPA實體Bean中不需要的屬性。 – stzoannos 2012-03-19 09:21:02