[英]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 的Collection
中AssetItemDocs
實體,而是創建另一個 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.