这个问题我在SO上见过好几次了。然而这个解决方案似乎不适用于我的问题。
我有一个Kotlin数据类,它被用作房间中的一个实体
@Entity(tableName = "training_session")
data class SessionEntity(
@PrimaryKey(autoGenerate = false) val id: Long,
@ColumnInfo(name = "current_state_marker") val currentState: Short,
@Embedded val states: List<Int>
)
它正在产生
> Task :training-infrastructure:kaptDebugKotlin FAILED
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). - java.util.List
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). - java.util.List
在同一个项目中,我有一个非常相似的实体,它也有一个列表,不会产生任何错误。
尝试了MikeT提供的答案,对我来说,它需要对转换器的定义方式进行一个小的改变
data class SessionStateList (val stateList : List<Int>)
class SessionStateListConverter {
@TypeConverter
fun fromArraySessionStateList(sh: List<Int>?): String? {
return Gson().toJson(sh)
}
@TypeConverter
fun toArraySessionStateList(sh: String?): List<Int>? {
val listType: Type = object : TypeToken<ArrayList<Int?>?>() {}.type
return Gson().fromJson(sh,listType)
}
}
快速跟进。我曾经提到过,我有另一个实体,它有一个嵌入的val-something:List
原因是,我没有注意到任何编译器错误是因为实体不包括在
@Database
注释中。
不能将列表/数组等作为列类型。因此,您的问题集中在@Embedded val states:List上
你可以有一个POJO例如。股东:-
data class StatesHolder(
val stateList: List<Int>
)
然后有
@Entity(tableName = "training_session")
data class SessionEntity(
@PrimaryKey(autoGenerate = false) val id: Long,
@ColumnInfo(name = "current_state_marker") val currentState: Short,
val states: StatesHolder
)
请注意,您不能嵌入StatesHolder,因为那只是插入List。如果你想嵌入,那么你必须嵌入一个使用StatesHolder的包装。
然后需要TypeConverter将StatesHolder对象转换为可存储的类型。可能是一个字符串,也可能是StatesHold对象的JSON响应,例如。
class Converters {
@TypeConverter
fun fromStatesHolder(sh: StatesHolder): String {
return Gson().toJson(sh)
}
@TypeConverter
fun toStatesHolder(sh: String): StatesHolder {
return Gson().fromJson(sh,StatesHolder::class.java)
}
}
您还需要使用@TypeConverters注释来定义Converts::class。如果在@数据库级别编码,则转换器具有完整作用域。
因此,在
@数据库(......)
之后,您可以:-
@TypeConverters(Converters::class)
问题内容: 我的第一个问题是- 构造函数应始终声明为公共吗? 如果我创建一个构造函数该怎么办。 我总是看到构造函数是隐式的。那么为什么构造函数有用呢?还是根本没有用。因为没有人可以调用它,或者永远也不能创建对象(由于构造函数)!这是我的第二个问题。 问题答案: 不, 构造函数 可以是,, 或(根本没有访问修饰符)。 做某事 并不意味着没有人可以访问它。这只是意味着该类之外的任何人都不能访问它。因此
问题内容: 我有一个带有私有构造函数的类’ClassA’。 现在,我正在扩展类’ClassA’[ 在执行此操作之前删除了 final 关键字] 现在,我得到了。这是什么意思,如何解决? 注意 我不能更改ClassA构造函数的访问说明符。 问题答案: 将ClassA的构造方法可见性从更改为。 构造函数总是从调用超类构造函数开始。如果构造函数显式包含对超类构造函数的调用,则使用该构造函数。否则,将隐含
本文向大家介绍hibernate 实体类必须要有无参构造函数吗?为什么?相关面试题,主要包含被问及hibernate 实体类必须要有无参构造函数吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 hibernate 中每个实体类必须提供一个无参构造函数,因为 hibernate 框架要使用 reflection api,通过调用 ClassnewInstance() 来创建实体类的实例,如果没
问题内容: 我在Sonar上收到此警告,我希望解决方案在声纳上消除此警告。我的课是这样的: 我想要适当的解决方案以消除此声纳警告。 问题答案: 如果此类仅是实用程序类,则应将该类定型并定义一个私有构造函数: 这样可以防止默认的无参数构造函数在代码的其他地方使用。另外,您可以将类定型,这样就不能在子类中对其进行扩展,这是实用程序类的最佳实践。由于您仅声明了一个私有构造函数,因此其他类将无法对其进行扩
我正在使用Spring并在“mapper”字段的第一个控制器中遇到问题: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“controller”的bean时出错:未满足的依赖项通过字段“mapper”表示;嵌套的异常是org。springframework。豆。工厂BeanCreationE
我对字段访问JPA注释的POJO非常困惑。 当字段是私有的时,您应该如何设置(或获取)它们?我更喜欢使用字段注释(我没有使用getter/setter方法),但我对它的工作方式有点困惑。