[英]How to implement only specific method of CrudRepository in Spring?
[英]How to select only specific fields using spring CrudRepository?
如何僅從以下類層次結構中選擇特定字段?
@Entity
public class MyEntity {
@Id private Long id;
@ManyToOne
@JoinColumn(name="fk_person_id", foreignKey = @ForeignKey(name="fk_person"))
private Person person; //unidirectional
private String fieldA, fieldB, ..field M;
//many more fields and some clobs
}
@Entity
public class Person {
@Id private Long id;
private String firstname;
private String lastname;
}
interface MyEntityRepository extends CrudRepository<MyEntity, Long> {
List<MyEntity> findByIdAndPersonFirstnameAndPersonLastname(long id, String firstname, String lastname);
}
這樣做效果很好,只是性能非常差,因為MyEntity
和Person
都有一些字段和關聯,我想阻止在這種特定情況下獲取(例如clob /文本)。
問題:如何編寫此查詢以查找結果集,只需獲取絕對必需的字段(讓我們假設來自MyEntity
id, fieldA, fieldB
?
對非必要字段使用延遲初始化 :
FetchType.LAZY
=除非通過getter明確“詢問”,否則不加載關系 FetchType.EAGER
=加載所有關系 例如,在Person
:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="fk_person_id", foreignKey = @ForeignKey(name="fk_person"))
private Person person; //unidirectional
將不需要的字段標記為惰性(但要注意此文檔的警告 ),或者創建具有所需屬性的專用類,並在查詢中使用投影:
select new com.foo.bar.MyEntityWithFirstNameAndLastName(m.id, person.firstname, person.lastname)
from MyEntity m
join m.person person
where ...
如果Person是一個經常使用的實體,並且包含很少被提取的大blob,則應考慮將blob存儲在單獨的實體中,並使用OneToOne延遲關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.