房间错误 - 如何处理?

时间:2017-11-23 07:37:58

标签: android sqlite android-room

我使用Android Room库。我有实体产品:

@Entity(tableName = "products", foreignKeys = @ForeignKey(
        entity = Category.class,
        parentColumns = "code",
        childColumns = "category_id"))
public class Product {

    @PrimaryKey(autoGenerate = true)
    private Long id;

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

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

    @ColumnInfo(name = "category_id")
    private String categoryId;

和第二个实体。

@Entity(tableName = "categories")
public class Category {

    @PrimaryKey
    @NonNull
    private String code;

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

    @Ignore
    private List<Product> products;

当我尝试插入产品列表时:

new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... voids) {
                MyApplication.get().getDB().productDao().insertAll(productList);
                return null;
            }
        }.execute();

尝试将产品插入数据库时​​出错。

Caused by: android.database.sqlite.SQLiteConstraintException: foreign key constraint failed (code 19)

我该如何解决?

1 个答案:

答案 0 :(得分:1)

我认为这可能与@Ignore类中的Category注释有关,您可以在其中定义与Product的一对多拥有关系。

尝试查看删除@Ignore注释时会发生什么。如果这不起作用,您还可以使用@Relation注释来定义一对多关系。 (来源:this SO answer