Как правильно сопоставить базу данных sqLite с Room? - PullRequest
0 голосов
/ 10 марта 2019

Я обновляю какое-то старое приложение, которое использовало SQLiteOpenHelper, и вместо этого я использую Room.У меня нулевой фон с Android / sqLite / Room и много SpringData / JPA.

Изначально я получал

Room cannot verify the data integrity. Looks like you’ve changed schema but forgot to update the version number. You can simply fix this by increasing the version number.

Поскольку я впервые использовал Room и я отобразил только половину столбцов (те, которые мне были нужны), я совершенно неполучить, почему он сказал "изменили схему".В Hibernate можно отображать только необходимые столбцы, и я подумал, что то же самое применимо и здесь.Поэтому я добавил все столбцы и ошибка сохранилась.Затем я изменил свою версию на 2 и добавил пустой метод миграции:

@Database(entities = {VisitorProvider.class}, version = 2, exportSchema = false)
public abstract class VisitorProviderDatabase extends RoomDatabase {
public abstract VisitorProviderRepo visitorProviderRepo();


public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // Since I didn't alter the table, there's nothing else to do here.
    }
};

}

И затем я получил эту ошибку:

Migration didn't properly handle visitante(br.com.acessoportaria.models.english.VisitorProvider)
//comparison between expected and found here

Я вставил сравнениена только один инструмент сравнения и получил это:

enter image description here

Игнорирование всех хороших практик по отображению Java-сущности в таблицу, просто учитывая эту проблему, что ядолжен измениться, чтобы избавиться от этой ошибки?Как правильно сопоставить текстовое поле между sqLite и Java?indices массив может быть пустым вместо пустого?

Вот моя сущность:

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity(tableName = "visitante")
public class VisitorProvider {

@PrimaryKey
private Integer _id;

@NonNull
private String rg;
@NonNull
private String rgFuncResp;

private String rgFuncRespAlteracao;

@ColumnInfo(name = "nome")
private String name;

@ColumnInfo(name = "sobrenome")
private String lastName;

@NonNull
@ColumnInfo(name = "origem")
private String origin;
}
...