Значение поля DTO, если это автоинкремент PrimaryKey - PullRequest
0 голосов
/ 07 февраля 2020

В моей базе данных комнат в моем приложении есть таблица «Сообщения», как показано ниже.

@Entity(tableName = "messages")
data class MessageDto(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "client_message_id")
    var clientMessageId: Long,

    @ColumnInfo(name = "message_id")
    var messageId: Long = 0L,

    @TypeConverters(EncryptString.Converter::class)
    @ColumnInfo(name = "body", defaultValue = "")
    var body: String,

    @ColumnInfo(name = "msg_type")
    var msgType: Int = 0,

    @ColumnInfo(name = "message_date", defaultValue = "")
    var messageDate: String,

    .........

)

Итак, допустим, я хочу вставить новое сообщение в базу данных. Я создаю объект MessageDto и затем вставляю его.

val messageDto = MessageDto(
                newClientMessageId,
                item.messageId,
                item.body,
                item.msgType,
                item.msgDate
                ...)

messageDao.insert(messageDto)

1) Поскольку PK существует только в локальной базе данных, я должен объявить его mySelf. Но с момента его autoIncrement какое значение я должен ввести?

2) Тело столбца, которое я хочу зашифровать с помощью созданной мной функции. Это правильно, как у меня TypeConverters?

1 Ответ

1 голос
/ 07 февраля 2020

Когда PK генерируется автоматически, вам не нужно устанавливать его значение. Вы можете просто вставить свою сущность, не устанавливая pk, база данных сгенерирует ее для вас, и вы также можете извлечь сгенерированный PK через DAO. Например, если у вас есть MessageDao, у вас будет этот метод внутри него:

@Insert
fun insertMessage(message: Message): Long

, а возвращаемое длинное - это ваш сгенерированный PK.

О преобразователе типов: считаются преобразователи для использования со сложными типами данных, такими как Date, и они должны преобразовываться в объекте из типа в другой. В вашем случае, я понимаю, вы превращаете строку в другую строку. Это не может работать с преобразователями типов, но вы можете зашифровать строку перед установкой в ​​вашей сущности. Например, если вы используете чистую архитектуру, хранилище будет вызывать источник данных БД, а источником данных БД будет делегированный для шифрования и дешифрования вашего поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...