Используя Room, я хочу написать Kotlin @Entity
с непримитивным типом данных в качестве его @PrimaryKey
. Например:
@Entity
data class MyEntity(
@PrimaryKey val myType: MyType,
val text: String
)
Я предоставляю TypeConverter между моим непримитивным типом в / из String.
class Converters {
@TypeConverter fun fromString(value: String): MyType = MyTypeUtil.parse(value)
@TypeConverter fun toString(myType: MyType) = myType.toString()
}
Я также правильно регистрирую свои TypeConverter
в своей базе данных:
@Database(
entities = [
MyEntity::class
],
version = 1
)
@TypeConverters(
Converters::class
)
abstract class MyDatabase : RoomDatabase() {
abstract fun myDao(): MyDao
}
Компиляция не выполняется:
...MyDao_Impl.java: uses unchecked or unsafe operations.
Recompile with -Xlint:unchecked for details.
Вы можете помочь мне найти проблему? Разрешает ли Room то, что я пытаюсь сделать?
Да - номер позволяет использовать непримитивные типы данных в качестве первичного ключа.
У вас есть ошибка в вашем TypeConverters
- вы должны обеспечить преобразование из String
в MyType
и из MyType
в String
, поэтому метод fromString
должен возвращать MyType
(прямо сейчас он возвращает String
). Измените это, и он должен работать :)
Если у вас по-прежнему возникают странные ошибки компиляции, попробуйте очистить проект после внесения изменений.
У меня есть кое-что, работающее в образце проекта с MyType
как PrimaryKey
. Я отчитаюсь после попытки исправить мой исходный проект. Спасибо!
У меня тоже кое-что работает в моем первоначальном проекте. Спасибо за вашу помощь!
Прошу прощения - я неправильно набрал пример кода. Я отредактировал упомянутую вами сигнатурную ошибку. Я попробую ваше предложение в минимальном образце проекта, чтобы проверить исправление.