Я пытаюсь создать базу данных 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)