【发布时间】:2020-10-02 13:41:33
【问题描述】:
我有一个通过队列进入我的应用程序的注册表列表,我有一个来自公共库的注册表类
public class Registry {
private String rowId;
private String code;
private String status;
}
并且我想将此注册表实体保留在关系数据库表中(其中 rowId 是主键,我还需要添加一个序列 ID)。所以我创建了一个扩展 Registry 的 jpa 实体
@Entity
public class RegistryEntity extends Registry {
@Id
private String rowId;
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer sequenceId;
}
public interface RegistryRespository extends JpaRepository<RegistryEntity, String> {}
是否有一种优雅的方式(无需实例化每个 RegistryEntity)将 List<Registry> 转换为 List<RegistryEntity>,以便我可以执行以下操作
List<Registry> registries = getFromQueue();
registryRespository.saveAll(RegistryEntityList)
【问题讨论】:
-
您必须以一种或另一种方式遍历 List
并创建 RegistryEntity 对象。你知道你定义了 rowId 两次吗?我的建议是不要让 RegistryEntity 扩展 Registry,因为 RegistryEntity 是您内部持久层的一部分,而 Registry 是公共合同的一部分。我宁愿把这两个分开。 -
有多种映射机制可用于 DTO 对象和实体之间的映射,但我建议使用
mapstruct,这里使用起来很方便。看mapstruct.orgbaeldung.com/mapstruct -
你也可以使用ModelMapper