我正在使用lombok为我的模型生成构造函数,getter和setter。当我尝试使用lombok为我的实体类生成构造函数时,出现此错误
Error:(14, 8) error: Entities and Pojos must have a usable public
constructor. You can have an empty constructor or a constructor whose
parameters match the fields (by name and type).
Tried the following constructors but they failed to match:
Region(int,java.lang.String,java.lang.String) -> [param:arg0 -> matched
field:unmatched, param:arg1 -> matched field:unmatched, param:arg2 ->
matched field:unmatched]
但是可以手动编写构造函数。谁能帮助我找出问题所在?
我的实体类如下所示
@Value
@Entity
public class Region {
@PrimaryKey
private int regionId;
private String name;
private String code;
}
客房版本:1.1.0 龙目岛版本:1.16.20
答案 0 :(得分:0)
匹配似乎失败,因为构造函数参数名称在运行时不可用。
自版本1.16.20起,lombok不再生成@ConstructorProperties
注释(它将带有这些名称)。
尝试将lombok.anyConstructor.addConstructorProperties = true
添加到您的lombok.config
中,lombok将为您的构造函数生成一个@ConstructorProperties
注释。 (有关如何配置lombok的详细信息,请参见https://projectlombok.org/features/configuration。)
编辑:问题是编译期间的注释处理。 Room和lombok都作为注释处理器挂接到javac中,并且它们不能很好地结合使用。因此,目前唯一的稳定解决方案是首先部署delombok。
答案 1 :(得分:0)
您可以使用以下设置:
@Entity
@Getter
@Setter
@AllArgsConstructor(onConstructor = @__({@Ignore}))
@NoArgsConstructor
public class Region {
@PrimaryKey
private int regionId;
private String name;
private String code;
}
这将使Room使用默认的构造函数,并通过提供的设置器设置值。此外,您有一个构造函数,该构造函数接受用于对象实例化的所有参数,但将被Room忽略。
注意:对象不会那样不变