我有一个@MapperConfig
看起来像这样。
@MapperConfig(componentModel = "spring")
public interface SomeEntityTypeMapperConfig {
@Mapping(target = PROPERTY_NAME_ENTITY)
@Mapping(source = SomeEntity.ATTRIBUTE_NAME_ID, target = SomeEntityType.PROPERTY_NAME_ID)
@Mapping(source = SomeEntity.PROPERTY_NAME_CREATED_AT, target = SomeEntityType.PROPERTY_NAME_CREATED_AT)
@Mapping(source = SomeEntity.PROPERTY_NAME_UPDATED_AT, target = SomeEntityType.PROPERTY_NAME_UPDATED_AT)
@Mapping(source = SomeEntity.PROPERTY_NAME_CREATED_BY, target = SomeEntityType.PROPERTY_NAME_CREATED_BY)
@Mapping(source = SomeEntity.PROPERTY_NAME_UPDATED_BY, target = SomeEntityType.PROPERTY_NAME_UPDATED_BY)
SomeEntityType<?, ?> fromEntity(SomeEntity entity);
// No @Mapping
void toEntity(SomeEntityType<?, ?> type, @MappingTarget SomeEntity entity);
}
下面是我的基本映射器界面。
public interface SomeEntityTypeMapper<T extends SomeEntityType<?, U>, U extends SomeEntity> {
T fromEntity(U entity);
void toEntity(T type, @MappingTarget U entity);
}
我真正的映射器来了。
@Mapper(config = SomeEntityTypeMapperConfig.class)
public interface UserTypeMapper extends SomeEntityTypeMapper<UserType, User> {
@Mapping(source = User.ATTRIBUTE_NAME_NAME, target = UserType.PROPERTY_NAME_NAME)
@Override
UserType fromEntity(User entity);
@Mapping(source = UserType.PROPERTY_NAME_NAME, target = User.ATTRIBUTE_NAME_NAME)
@Override
void toEntity(UserType type, @MappingTarget User entity);
}
MapStruct生成以下impl类,其中包含不需要的映射。
public class UserTypeMapperImpl implements UserTypeMapper {
@Override
public UserType fromEntity(User entity) {
if ( entity == null ) {
return null;
}
UserType userType = new UserType();
userType.setName( entity.getName() ); // explicitly configured
userType.setId( entity.getId() ); // inherited from the config
userType.setCreatedAt( entity.getCreatedAt() ); // inherited from the config
userType.setUpdatedAt( entity.getUpdatedAt() ); // inherited from the config
userType.setCreatedBy( entity.getCreatedBy() ); // inherited from the config
userType.setUpdatedBy( entity.getUpdatedBy() ); // inherited from the config
return userType;
}
@Override
public void toEntity(UserType type, User entity) {
if ( type == null ) {
return;
}
entity.setName( type.getName() ); // explicitly configured
entity.setCreatedAt( type.getCreatedAt() ); // UNWANTED!!!
entity.setUpdatedAt( type.getUpdatedAt() ); // UNWANTED!!!
entity.setUpdatedBy( type.getUpdatedBy() ); // UNWANTED!!!
entity.setId( type.getId() ); // UNWANTED!!!
entity.setCreatedBy( type.getCreatedBy() ); // UNWANTED!!!
}
}
我做错了什么?我该如何修复它?
我正在分享我的发现。
我需要用@BeanMap(忽略ByDefault=true)
注释该方法。
有趣的是,注释必须位于叶映射器接口中。
@BeanMapping(ignoreByDefault = true) // WORKS!!!
@Mapping(source = UserType.PROPERTY_NAME_NAME, target = User.ATTRIBUTE_NAME_NAME)
@Override
void toEntity(UserType type, @MappingTarget User entity);
无法使用配置或父接口。
java prettyprint-override">public interface SomeEntityTypeMapperConfig {
@BeanMapping(ignoreByDefault = true) // Doesn't work!
void toEntity(SomeEntityType<?, ?> type, @MappingTarget SomeEntity entity);
}
public interface SomeEntityTypeMapper<T extends SomeEntityType<?, U>, U extends SomeEntity> {
@BeanMapping(ignoreByDefault = true) // Doesn't work!
void toEntity(T type, @MappingTarget U entity);
}
您所指的不需要任何注释的反向映射实际上是MapStruct生成映射的正常方式。如果源bean和目标bean具有相同的属性(在您的示例中也是如此),MapStruct将为其创建映射。
如果不想映射某些属性,可以逐个忽略这些属性,或者使用BeanMapping(ignoreByDefault=true)。使用第二个选项,MapStruct将仅为定义的映射创建映射。
我有两个Kafka集群,第一个--使用“SASL SCRAM-SHA-256”机制进行身份验证,另一个--没有为其设置配置。 为了能够连接到Clickhouse中的< code>Kafka-A,我配置了一个< code>config.xml文件,如下所示: 在这一点上,我发现我无法使用Kafka引擎表连接到Kafka-B。当我尝试发生打印以下消息的错误时: storage Kafka(XXX):[
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1
Tomcat每次部署花费大约20分钟,我发现它在部署阶段被卡住了,请参见下面的日志, 第一次启动会消耗大约2-7分钟,然后每次重启都会变得更糟。 环境: sudo apt-get install python-software sudo add-apt-repository ppa:webupd8team/java sudo apt-get更新
问题内容: 我需要在Linux / OSX终端下使用“干净的” shell(例如bash),而无需任何用户配置,但是每次启动时,它都会从某些文件(例如〜/ .bashrc)中读取配置信息。每当我需要“干净”的外壳时,我都可以修改该文件,并在完成后将其还原,但是有没有更简单的方法来执行此操作,例如命令? 问题答案: 您可以传递和命令行选项: 您可以在手册页中找到有关这些选项的文档。
你好团队, 我正在我的系统上运行一个Maven构建(mvn clean install),Maven构建在下面的代码行之后被终止,没有任何错误。 我使用的是最新的maven版本3.6.3(硬件配置-英特尔i5第4代处理器和16 GB RAM)。 下面是我用来执行项目maven构建的命令。 在IntelliJ中: D:\Software\jdk-11.0.10 9\bin\java。exe-Dmav
TL;DR:将@webservlet(“/find-customers”)放在servlet(通过Tomcat 7部署)的开头并不是将servlet映射到host:port/webproject/find-customers中,即使servlet位于src文件夹中。