java - SQLiteConstraintException : How to map "no relationship" with a FOREIGN KEY in Room

标签 java android orm foreign-keys android-room

我使用 Android Room 持久性库作为 ORM。

我有以下实体:

@Entity(tableName = "log_entries",
        foreignKeys = {
                @ForeignKey(
                        entity = Serving.class,
                        parentColumns = "id",
                        childColumns = "foodId",
                        onDelete = ForeignKey.CASCADE
                )
        }
)
public class LogEntry {

    @PrimaryKey(autoGenerate = true)
    private long id;

    private long servingId;

    // ...
}

有些日志条目有服务,有些则没有。添加日志条目 其中有一份服务工作正常,但添加一个 id = 0 来表示“无关系”会导致 SQLiteConstraintException 和消息

FOREIGN KEY constraint failed

// ...
LogEntry logEntry = new LogEntry();
logEntry.setServingId(0);
// ...

db.logEntryDao().add(logEntry);

那么,我该如何表达日志条目在 Room 中没有服务的事实呢?

最佳答案

您需要使用Long作为数据类型,并插入null作为servingId的实体。

// ...
LogEntry logEntry = new LogEntry();
logEntry.setServingId(null);
// ...

db.logEntryDao().add(logEntry);

关于java - SQLiteConstraintException : How to map "no relationship" with a FOREIGN KEY in Room,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44749812/

相关文章:

java - 如何在 Android 中使用自定义正则表达式验证 EditText 输入?

javascript - 1 :m (using belongsTo and hasMany). 的问题结果不反射(reflect)提议的模型

php - 使用 Doctrine ORM (1.2) 为预先存在的记录创建一对一关系

android - GreenDao无法设置数据库

java - 在具有未知标记名的 html 标记之间提取?

java - 调整 JButton 大小会导致其消失

java - 为什么从 0x0000 到 0xFFFF 的一些 int 不是定义的 unicode 字符

java - ExtendedTableDataModel 重置方法如何工作?有文档吗?

android - RenamingMockContext 需要提供getResources

android - 协程中的自定义拦截器