Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyRefe

 Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property use found for type Role!

 

从字面上来看,很明显这句话的意思是在实体Role里面找不到use这个字段。按常规操作,把涉及到的就字段名改成新的字段名就OK了。但是这次我却遇到了一个新问题。

 

我的Role实体里有这么些字段,如下:

public class Role implements Serializable{
    private Integer id;
    private String name;
    private String code;
    private String createBy;//创建人
    private Date createTime;//创建时间
    private Integer use;//0启动1禁用

    ...
}

 

某一天,前端大佬跟我说,这个数据库里存的字段名是enabled啊,就不要返回use了,于是让我改成enabled,如下:

Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyRefe_第1张图片

 

于是我就改了,对应的RoleRepository里凡是涉及use的也全改成enabled了。可启动的时候仍然一直在报错。这让我百思不得其解。于是我请来了后端大佬,大佬仔细的检查了一下代码,确认仓库方法的表面是没有问题了。那么,问题很有可能出在哪里呢?最后锁定在“返回”两个字上。

从数据库里查出来的数据一定是要返回给“别人”的,程序一直报错说use找不到,那么可能就是"别人"拿use来找它的值时,一直找不到use在哪,孰不知我已经把use换成了enabled.  于是经过一系列仔细的排查,终于在一个投影接口里找到了问题所在。

在仓库的众多方法里,有这么一个方法:

RoleProjection findById(Integer id);//根据id获取详情

投影接口RoleProjection的定义如下:

public interface MdmRoleProjection {

    Integer getId();

    String getName();

    Integer getUse();

}

其中getUse就是获取use字段的值。而这个use因为被我改名为enabled,所以必然它是找不到值的。所以才会报错。

你可能感兴趣的:(Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyRefe)