Java 将布尔值更改为布尔值会在MapStruct中引发noSuchMethodError

Java 将布尔值更改为布尔值会在MapStruct中引发noSuchMethodError,java,hibernate,boolean,mapstruct,Java,Hibernate,Boolean,Mapstruct,我有一个由hibernate定义的布尔值 public class MyClassWithMyVar { @Column(name="myVar", nullable=false) private Boolean myVar; public Boolean getMyVar(){ return myVar; } public void setMyVar(Boolean myVar){ this.myVar

我有一个由hibernate定义的布尔值

public class MyClassWithMyVar {

     @Column(name="myVar", nullable=false)
     private Boolean myVar;

     public Boolean getMyVar(){
         return myVar;
     }

     public void setMyVar(Boolean myVar){
         this.myVar=myVar;
     }

}
我们知道这个布尔值不应该为空,mapstruct在一些映射程序中使用了这个值

@Mapper
@Mappings({@Mapping(target = "id", ignore =true)})
abstract MyClassWithMyVar copyMyClassWithMyVar(MyClassWithMyVar myClassWithMyVar);
然后我将所有具有布尔值的位置更改为布尔值,运行应用程序并抛出NoSuchMethodError:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: MyClassWithMyVar.getMyVar()Ljava/lang/Boolean;

mapstruct遵循JavaBeans规范,JavaBeans规范规定:

对于布尔属性,我们允许getter方法匹配模式:
publicbooleanis()

is应用于布尔值(基元类型)
当我们确实想要返回对象时,我们使用getX()作为布尔getMyBoolean()。

mapstruct遵循JavaBeans规范,JavaBeans规范说明:

对于布尔属性,我们允许getter方法匹配模式:
publicbooleanis()

is应用于布尔值(基元类型)
当我们确实想要返回对象时,我们使用getX()来表示布尔getMyBoolean()。

您可以在mapstruct中创建自己的方法。 下面的转换示例

class Entity{
Boolean x;
};
class DTOEntity{
boolean z;
}
在Mapstruct中,请尝试以下操作

@Mapping(target = "z", source = "x", qualifiedByName="getBoolean")
DTOEntity entityToDto(Entity entity);
@Named("getBoolean")
default boolean getBoolean(Boolean x) {
    return  (boolean) x;
}

}

您可以在mapstruct中创建自己的方法。 下面的转换示例

class Entity{
Boolean x;
};
class DTOEntity{
boolean z;
}
在Mapstruct中,请尝试以下操作

@Mapping(target = "z", source = "x", qualifiedByName="getBoolean")
DTOEntity entityToDto(Entity entity);
@Named("getBoolean")
default boolean getBoolean(Boolean x) {
    return  (boolean) x;
}

}

我认为在这种情况下我们应该进行空检查。你能提出一个问题吗?我不这么认为,如果我们有nullable=false,请告诉我们我们不希望它为null,但是如果你认为另一个答案会更好,你可以写另一个答案。我的意思是,MapStruct应该像你手工编写代码那样生成代码。顺便说一句,我是MapStruct的开发者之一。我认为这可能被认为是一个bug,这就是为什么我建议创建这个问题,我认为它与我不理解
java.lang.NoSuchMethodError
与MapStruct的关系。MapStruct生成了一个实现。如果目标方法在编译时不可用,编译将失败。因此,
Boolean getMyVar()
必须存在。显然,它不存在运行时,因此出现了异常。问:你确定你的
MyClassWithMyVar
可用编译时版本与你的运行时版本相同吗?我认为在这种情况下我们应该进行空检查。你能提出一个问题吗?我不这么认为,如果我们有nullable=false,请告诉我们我们不希望它为null,但是如果你认为另一个答案会更好,你可以写另一个答案。我的意思是,MapStruct应该像你手工编写代码那样生成代码。顺便说一句,我是MapStruct的开发者之一。我认为这可能被认为是一个bug,这就是为什么我建议创建这个问题,我认为它与我不理解
java.lang.NoSuchMethodError
与MapStruct的关系。MapStruct生成了一个实现。如果目标方法在编译时不可用,编译将失败。因此,
Boolean getMyVar()
必须存在。显然,它不存在运行时,因此出现了异常。问题:您确定您的
MyClassWithMyVar
可用编译时版本与运行时版本相同吗?