База данных комнат с ограничением UNIQUE для нескольких столбцов - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь создать базу данных Room, в которой будет применяться уникальное ограничение к комбинации из трех столбцов, поэтому конфликт возникнет только в том случае, если все три столбца входящей записи совпадают со всеми тремя из существующей записи.

Моя текущая попытка (ниже) дает конфликт, если какой-либо из трех столбцов конфликтует, и мне трудно найти решение для этого.

Класс базы данных:

@Database(entities = {OutputPreset.class}, version = 1)
public abstract class PresetDatabase extends RoomDatabase {
    static final String FILENAME = "presets.db";
    public abstract PresetDao getDao();
}

Упрощенный класс OutputPreset:

@Entity(tableName = "Presets", indices = { @Index(value = {"Address", "Port", "Protocol"}, unique = true) } )
public class OutputPreset {
    @PrimaryKey
    int id;
    @ColumnInfo(name = "Protocol")
    public final String protocol;
    @ColumnInfo(name = "Address")
    public final String address;
    @ColumnInfo(name = "Port")
    public final int port;

    ...
}

Насколько я могу судить, оператор @Index(value = {"Address", "Port", "Protocol"}, unique = true) просто применяет ограничение уникальности к каждому столбцу по отдельности, а не группирует их.

Любая помощь приветствуется!

ОБНОВЛЕНИЕ Оказывается, проблема заключалась в том, что первичный ключ не генерировался автоматически для каждой записи, поэтому они просто перезаписывали друг друга всякий раз, когда я что-то вставлял . Исправлено установкой аннотации идентификатора @PrimaryKey(autoGenerate = true)

...