Java 自动将Spring JPA实体OneToMany转换为列表<;ID>;在DTO和背面(ModelMapper)

Java 自动将Spring JPA实体OneToMany转换为列表<;ID>;在DTO和背面(ModelMapper),java,spring-boot,spring-data-jpa,modelmapper,Java,Spring Boot,Spring Data Jpa,Modelmapper,Animal.java @Data @Entity public class Animal implements MyEntityInterface { public enum Sex {MALE, FEMALE} @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; private Sex sex; p

Animal.java

@Data
@Entity
public class Animal implements MyEntityInterface {
    public enum Sex {MALE, FEMALE}

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String name;
    private Sex sex;
    private boolean castrated;

    @OneToMany
    private List<Symptom> symptoms;
}
@数据
@实体
公共类动物实现MyEntityInterface{
公共枚举性别{男性,女性}
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
私人性行为;
私人布尔阉割;
@独身癖
私人名单症状;
}
AnimalDTO.java

@Getter
@Setter
public class AnimalDTO implements Serializable {
    private long id;
    private String name;
    private Animal.Sex sex;
    private boolean castrated;

    private List<Long> symptoms;
}
@Getter
@塞特
公共类AnimalTo实现可序列化{
私人长id;
私有字符串名称;
私人动物。性;
私人布尔阉割;
私人名单症状;
}
我希望症状列表自动映射到ID列表。这可以通过多种方式实现,例如创建类型映射、创建转换器,甚至只需在AnimalDTO.java中创建一个方法:

public void setSymptoms(List<Symptom> symptoms) {
    if (symptoms != null)
        this.symptoms = symptoms.stream().map(s -> s.getId()).collect(Collectors.toList());
}
public void集合症状(列出症状){
如果(症状!=null)
this.symptoms=symptoms.stream().map(s->s.getId()).collect(Collectors.toList());
}
但现在想象一下,这不仅仅是症状,还有50个其他领域。对于相同的功能,这需要很多代码。然后,不仅仅是动物对动物,还有另外30个不同的类,有各自的DTO

而且,这仍然给我们留下了回头的路。从ID到实体。这(理论上)可以通过以下伪代码轻松实现:

List<EntityMemberField.class> list;
for (var entityid : listOfEntityIDsOfDto) {
    Object persistedObject = entityManager.find(EntityMemberField.class, entityid);
    list.add(persistedObject);
}
...
ModelMapperDestination.setField(list);
列表;
for(变量entityid:ListofEntityIDsOfTo){
Object persistedObject=entityManager.find(EntityMemberField.class,entityid);
list.add(persistedObject);
}
...
ModelMapperDestination.setField(列表);
这绝对适用于每个实体/DTO,并应自动适用于实体实现MyEntityInterface的每个实体关系

我如何实现这一点的一个想法是重写ModelMapper中的MappingEngineImpl.java,我将其注册为Spring服务并将EntityManager注入其中,但如何让ModelMapper使用我的?还是有更简单的方法

目标是通过以下方式实现从Spring实体到相应DTO的相当自动化的转换。。。只需调用
modelMapper.map(entity,EntityDTO.class)