我有一个具有以下属性的“人”实体,
Id
Name
F-Name
Age
Address
当我在Person上调用存储库函数findAll()时,它将返回一个Persons列表。
List<Person> list = somefuntionToConvertIterableToList(personRepository.findAll());
此列表包含多个“人员类型”对象。
人员...... ... Id1,Name1,F-Name1,Age1,Address1
人员....... IdN,NameN,F-NameN,AgeN,地址N
我需要从所有人中删除“ Id”,我该怎么办?
我知道我们可以使用“删除”来删除列表中的元素,但是如何删除元素中的属性?
答案 0 :(得分:0)
您当然可以将id
设置为null或在序列化中添加忽略,但是也许您根本不想加载id
。然后,通常您将使用DTO
或Tuple
决定要填充的字段。因此,不要首先填充所有内容,然后删除不需要的内容(我没有使用您的Person
,而只是使用了一个简化的示例类)。
存储库中的元组查询就像(JPQL):
@Query("SELECT te.name AS name, te.created as created FROM TestEntity te")
List<Tuple> findAllTuple();
这将需要额外的工作,以使元组在序列化时对应于原始实体。因此最好使用DTO
,例如:
// This class would be exactly as your Person but without that id
@AllArgsConstructor // you need the constructor for new in jpql
public class TestEntityDto {
private String name;
private LocalDateTime created;
}
,而您存储库中的查询将是:
@Query("SELECT NEW org.example.data.entity.dto.TestEntityDto(te.name, te.created) FROM TestEntity te")
List<TestEntityDto> findAllDto();
答案 1 :(得分:0)
我认为您需要使用:@JsonIgnore in Id如下:
@JsonIgnore
Field you want remove in reponse.
或者您可以创建DTO并将想要返回的所有字段都显示为:
public class PersonDTO {
//all field you want return
}