将 DTO 映射到实体,如果您的所有字段都为空,则将实体保留为空
Mapping DTO an Entity, leave entity null if all your field is null
我的实体是 return 个字段 null 示例:EntityTest{id=null, name=null}
但我需要,如果所有字段都为空 return EntityTest = null
测试实体
@Entity
@Table(name="TestEntity")
public class TestEntity {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name="test_name")
private String testName;
}
TestEntityDto
public class TestEntityDto {
private long id;
private String test_name;
}
TestEntityMapper
@Mapper
public interface TestEntityMapper {
TestEntity TestEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
实施
testEntityDTO.setId(null);
testEntityDTO.setNameTest(null);
TestEntity testEntity = TestEntityMapper.TestEntityDTOToTestEntity(testEntityDTO);
实际结果:
EntityTest{id=null, name=null}
预期结果:
EntityTest = null
我建议只执行 toString 以检查所有 null 情况:
toString(){"id:"+id+",name:"+name;}
所以如果这个 returns "id:null,name:null" 然后你可以确定它是 null 并且 return 在检查 equals
之后是 null
在即将发布的 1.5 版本中,MapStruct 添加了对条件映射的支持。在当前发布的 1.5 Beta2 中,不支持条件支持参数。但是,有一个开放的enhancement request为源参数添加这个。
这意味着您可以执行以下操作:
public class MappingUtils {
@Condition
public static boolean isPresent(TestEntityDTO dto) {
if (dto == null) {
return false;
}
return dto.getId() != null || dto.getName() != null;
}
}
这意味着您可以拥有如下映射器:
@Mapper(uses = MappingUtils.class)
public interface TestEntityMapper {
TestEntity testEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
}
实现将如下所示:
public class TestEntityMapperImpl implements {
@Override
public TestEntity testEntityDTOToTestEntity(TestEntityDTO dto) {
if (!MappingUtils.isPresent(dto)) {
return null
}
// the rest of the mapping
}
}
注意:这在发布版本中尚不可行,但这就是它的工作方式。除了这个未来的解决方案,MapStruct 没有其他开箱即用的解决方案。
我的实体是 return 个字段 null 示例:EntityTest{id=null, name=null}
但我需要,如果所有字段都为空 return EntityTest = null
测试实体
@Entity
@Table(name="TestEntity")
public class TestEntity {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name="test_name")
private String testName;
}
TestEntityDto
public class TestEntityDto {
private long id;
private String test_name;
}
TestEntityMapper
@Mapper
public interface TestEntityMapper {
TestEntity TestEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
实施
testEntityDTO.setId(null);
testEntityDTO.setNameTest(null);
TestEntity testEntity = TestEntityMapper.TestEntityDTOToTestEntity(testEntityDTO);
实际结果:
EntityTest{id=null, name=null}
预期结果:
EntityTest = null
我建议只执行 toString 以检查所有 null 情况:
toString(){"id:"+id+",name:"+name;}
所以如果这个 returns "id:null,name:null" 然后你可以确定它是 null 并且 return 在检查 equals
之后是 null在即将发布的 1.5 版本中,MapStruct 添加了对条件映射的支持。在当前发布的 1.5 Beta2 中,不支持条件支持参数。但是,有一个开放的enhancement request为源参数添加这个。
这意味着您可以执行以下操作:
public class MappingUtils {
@Condition
public static boolean isPresent(TestEntityDTO dto) {
if (dto == null) {
return false;
}
return dto.getId() != null || dto.getName() != null;
}
}
这意味着您可以拥有如下映射器:
@Mapper(uses = MappingUtils.class)
public interface TestEntityMapper {
TestEntity testEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
}
实现将如下所示:
public class TestEntityMapperImpl implements {
@Override
public TestEntity testEntityDTOToTestEntity(TestEntityDTO dto) {
if (!MappingUtils.isPresent(dto)) {
return null
}
// the rest of the mapping
}
}
注意:这在发布版本中尚不可行,但这就是它的工作方式。除了这个未来的解决方案,MapStruct 没有其他开箱即用的解决方案。