簡體   English   中英

如何使用spring CrudRepository僅選擇特定字段?

[英]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);
}

這樣做效果很好,只是性能非常差,因為MyEntityPerson都有一些字段和關聯,我想阻止在這種特定情況下獲取(例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM