【发布时间】:2020-05-25 07:13:32
【问题描述】:
我试图使用 Android 房间库提供的外键注释将我的“交易”表链接到我的“信封”表。基本上,我希望一个信封里面有多个交易。
我尝试过的事情:
-
我尝试将
@Column_info(names)添加到列中,但它没有做任何事情。 -
我还尝试检查我传递给 Transaction 构造函数的值是否确实引用了 Envelope 表上的 rowId,并且确实如此。
这些是我的表 POJO:
信封类:
@Entity(tableName = "envelope")
@Fts3
public class Envelope {
@ColumnInfo(name="rowid")
@PrimaryKey(autoGenerate = true)
private int rowid;
private String name;
private float balance;
private float maxBalance;
private String description;
private Date createdAt;
private Date LastUpdatedAt;
事务类:
@Entity(foreignKeys = @ForeignKey(entity = Envelope.class,
parentColumns = "rowid",
childColumns = "envelopeId",
onDelete = ForeignKey.CASCADE))
public class Transaction {
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
private float amount;
@ColumnInfo(name="envelopeId")
private int envelopeId;
private String type; //can be "income" or "expense"
@ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
private Date dateTransacted;
这是错误:
SQLiteLog: (1) foreign key mismatch - "Transaction" referencing "envelope" in "INSERT OR ABORT INTO `Transaction` (`id`,`name`,`amount`,`envelopeId`,`type`,`dateTransacted`) VALUES (nullif(?, 0),?,?,?,?,?)"
【问题讨论】:
-
除非知道可能不匹配的值,否则错误消息是无用的。
-
我已经检查了我想在我的事务类的构造函数中添加的“envelopeId”值,看看它是否与我的信封类中的实际“rowId”值匹配,并且它确实存在。跨度>
-
您找到解决方案了吗?在我将@Fts4 添加到我的一个实体并将列名更改为“rowid”后,我遇到了同样的问题。这些值似乎合适,但我得到了同样的错误......
标签: java android-sqlite android-room