我尝试将 Java 记录从一个包转换为另一个包。
@Mapper
public interface KriteriumMapper {
KriteriumMapper INSTANCE = Mappers.getMapper(KriteriumMapper.class);
de.model.Kriterium fromPersistenceRecord(Kriterium k);
}
package de.persistence.model.nontransactional;
public record Kriterium(String name, String crkSpaltenname) {}
至
package de.model;
public record Kriterium(String name, String crkSpaltenname) {}
但是Mapstruct为新记录创建了一个带有空构造函数的映射器,这显然是不可能的:
@Override
public de.Kriterium fromPersistenceRecord(de.persistence.model.Kriterium k) {
if ( k == null ) {
return null;
}
de.model.Kriterium kriterium = new de.Kriterium();
return kriterium;
}
Mapstruct 版本是
1.5.5.Final
。
如何处理Java记录到记录的映射?
我期待一个映射器实现使用 jave 记录的常规所有参数构造函数。
你混淆了包名称,我注意到你使用了超过 2 个
Kriterium
类:
de.persistence.model.nontransactional.Kriterium
de.persistence.model.Kriterium
de.Kriterium
您需要仔细检查是否在
KriteriumMapper
中使用了正确包中的类。
这是记录到记录映射的最小工作示例:
@Mapper
public interface KriteriumMapper {
Kriterium2 fromPersistenceRecord(Kriterium k);
}
public record Kriterium(String name, String crkSpaltenname) {}
public record Kriterium2(String name, String crkSpaltenname) {}
这是编译后生成的
KriteriumMapperImpl
实现:
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-10-02T18:18:30+0700",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.1 (Oracle Corporation)"
)
public class KriteriumMapperImpl implementsKriteriumMapper {
@Override
public Kriterium2 fromPersistenceRecord(Kriterium k) {
if ( k == null ) {
return null;
}
String name = null;
String crkSpaltenname = null;
name = k.name();
crkSpaltenname = k.crkSpaltenname();
Kriterium2 kriterium2 = new Kriterium2( name, crkSpaltenname );
return kriterium2;
}
}