我使用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)
我该如何解决?
答案 0 :(得分:1)
我认为这可能与@Ignore
类中的Category
注释有关,您可以在其中定义与Product
的一对多拥有关系。
尝试查看删除@Ignore
注释时会发生什么。如果这不起作用,您还可以使用@Relation
注释来定义一对多关系。 (来源:this SO answer)