簡體   English   中英

Spring Boot 從模型中提取有限的字段

[英]Spring boot extracting limited fields from a model

我正在使用 JPA,下面是我的 AssetItem Dto。 在 assetItemDocsCollection 中,我正在嘗試獲取 Collection。 但我不想要 AssetItemDocs 中的所有字段。 例如,我不想要 documentByte,因為這個字段會很大。 我只希望所有字段都離開該字段,我怎樣才能用更少的代碼做到這一點。

public class AssetItemDto extends AbstractDto<Long> {

    private Collection<AssetItemDocs> assetItemDocsCollection;
}

public class AssetItemDocs implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Lob
    @Column(name = "document_byte")
    private byte[] documentByte;
    @Column(name = "creation_date")
    @Temporal(TemporalType.DATE)
    private Date creationDate;
    @JoinColumn(name = "asset_item_id", referencedColumnName = "id")
    @ManyToOne
    private AssetItem assetItemId;
}

這通常是進行投影的目的:僅檢索實體的部分屬性。 有幾種方法可以做到這一點,例如:

不要在 DTO 的CollectionAssetItemDocs實體,而是創建另一個 DTO,其中包含要獲取的AssetItemDocs的所有字段(除了documentByte之外的所有字段)。 該 DTO 必須有一個將所有這些字段作為參數的構造函數(類型和名稱必須與實體中聲明的相匹配)。

然后在您的存儲庫中,編寫一個查詢方法,其返回類型是該 DTO 的Collection 如果您的查詢可通過其方法名稱派生,它將按原樣工作,但如果您的方法是使用@Query注釋中的 JPQL 查詢編寫的,則需要在select原因中使用這種方式顯式調用 DTO 構造函數語法: SELECT new full.package.MyDTO(entity.attribute1, entity.attribute2) FROM MyEntity entity

然后,您只需將存儲庫返回的Collection包含在您的AssetItemDto中。

注意:雖然可以使用相同的實體類而不是新的 DTO 進行投影,但我個人認為在 DTO 中公開實體對象是一種不好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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