GreenDao报Can't replace method in ...\mvp\model\BrandModel.java:120 with generated version.错误的解决办法

来源:互联网 发布:全国医院数据库 编辑:程序博客网 时间:2024/06/08 16:44

新项目需要用到数据库,之前一直用的是 ORMLite 框架,但是突然想用一下别的数据库,就想到了 GreenDao ,诚然 GreenDao 确实比 ORMLite 快捷简便,但不得不说 GreenDao 的坑也确实很多。

按照网上的教程(其实百度的教程基本都是千篇一律翻译的官网的),捣鼓了半天最后卡在了下面这个错误上面:

Can't replace method in ...\mvp\model\BrandModel.java:120 with generated version.                      If you would like to keep it, it should be explicitly marked with @Keep annotation.                      Otherwise please mark it with @Generated annotation

上官网查看了一下教程,虽然这个错误也被官网重点标出来了,但是上面说的报错原因和解决办法让我看的有点不明觉厉,好吧,有事找度娘/谷爸,然后......点开一篇(翻译的官网的),再点开一篇(翻译官网的),哎哟我这暴脾气,我就不信了,再再点开一篇(还是翻译官网的)。。。好吧,请允许我蹲一会墙角。。。

既然网上的解决办法都是翻译的官网的,而官网的解决办法我又看的不明觉厉,怎么办呢?我再去蹲一会墙角。。。就在我在官网一筹莫展的时候,不知道怎么点出了一片介绍(确实我也不知道点击了官网哪个链接进入的),然后看到介绍说 Bean 类在工程 Make 生成 Dao 的时候会自动帮助生成 get/set 方法,那么我就试试把我自己使用 GsonFormat 生成的 get/set 方法删掉然后再 Make,果然,这次确实编译通过,成功生成 Dao 文件了,并且 GreenDao 还自动为我们的 Bean 类生成了 get/set 方法。为什么会这样呢?我们对比一下成功前后两个Bean文件:

生成Dao失败的Bean(使用 GsonFormat 自动生成的Bean):

@Entitypublic class X1Model implements Serializable {    @Id    private long id;    @ToMany(referencedJoinProperty = "xx")    private List<X2Model> list;    public long getId() {return id;    }    public void setId(long id) {this.id = id;    }    public List<X2Model> getList() {        return list;    }    public void setList(List<X2Model> list) {this.list = list;    }}


生成Dao成功GreenDao自动为我们添加get/set方法之后的Bean:
@Entitypublic class X1Model implements Serializable {    @Id    private long id;    @ToMany(referencedJoinProperty = "xx")    private List<X2Model> list;    public long getId() {return id;    }    public void setId(long id) {this.id = id    }    @Generated(hash = 717937950)    public List<X2Model> getList() {        。。。省略自动生成的数据库代码。。。        return list;    }}


我发现,我在上面关联有外表 X2Model ,但是第二个 Bean 比第一个 Bean 少了一个 set  方法,即说明我们所关联的外表不可以在Bean里面直接改变(set 方法)它的值,也是第一个 Bean 总是报错的原因。所以,省时省力的解决办法就是需要生成 Dao 的 Bean 类就别写 set/get 方法了,GreenDao 会为我们自动生成。


另外还有一个坑就是 Bean 只能是 Java,使用 Kotlin 的话也无法生成 Dao 文件(别问我为什么知道,说多了都是泪)。


阅读全文
0 0