當使用房間持久性庫時,我開始知道沒有方法來設置具有NOT NULL和UNIQUE約束的數據類字段。 SQLite是否支持這些約束。在使用這些約束的情況下遷移舊數據庫不是一個問題嗎?任何人都可以對這個問題提出建議嗎?房間持久性庫沒有「NOT NULL」和「UNIQUE」限制
回答
我才知道,有沒有方法來設置數據類字段NOT NULL,也UNIQUE約束
一個@NonNull
註釋上的@Entity
字段將導致該字段的列有應用NOT NULL
到它。
unique=true
在@Index
將強制執行唯一性約束(例如,@Entity(indices={@Index(value="something", unique=true)}
)。但是,您是正確的,不支持通過索引之外的列上的普通UNIQUE
約束。
使用這些約束條件遷移舊數據庫不是一個問題嗎?
房間的設計不支持現有的數據庫結構,特別是在當前的alpha
狀態下。隨着時間的推移,我希望Room會支持更高比例的SQLite功能,但如果它達到100%,我會驚呆。
非常感謝:) –
非常感謝您對房間圖書館的瞭解。我有這麼多的問題,並且在我得到解決方案時,它總是您的答案:D – Aenadon
互補答案使用科特林那些即將NOT NULL
:
請注意,標誌着類型爲非可選自動使其不爲空(和一個可選的類型不會做)。
您可以在數據庫的@Database(exportSchema = true)
房間生成的架構中對其進行檢查。
比如我有類似的東西:
@Entity(tableName = "messages")
data class Message (
@PrimaryKey
val messageId: UUID = UUID.randomUUID(),
val date: Date = Date(),
val receivedDate: Date? = null
)
而在生成的模式,我可以讀到:
"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`messageId` TEXT NOT NULL, `date` INTEGER NOT NULL, `receivedDate` INTEGER, PRIMARY KEY(`messageId`))"
(注:日期類型是這裏的Int
和UUID的字符串由於我在別處使用的轉換器)
- 1. 房間持久性錯誤
- 2. Windows和Ubuntu的房間持久性庫不同哈希
- 3. 客房持久性庫:無法解析
- 4. 安卓客房持久性庫:的Upsert
- 5. 如何在房間持久性庫中插入圖像?
- 6. 使用房間持久性庫更新參數
- 7. 如何實現同步房間(Android的持久性庫)
- 8. CREATE VIEW相當於新房間持久性庫
- 9. SQLite和房間持久性庫:如何結合IN條件和LIKE?
- 10. 沒有持久性的Aerospike複製
- 11. NHibernate:沒有持久性NHibernate.Criterion.SqlFunctionProjection
- 12. 持久性和知識庫
- 13. 查看使用房間持久性庫創建的數據庫的內容
- 14. 刪除表時受限制的API lint錯誤。客房持久
- 15. Infinispan持久性沒有任何數據庫?
- 16. 房間持久性庫:嘗試重新打開已關閉的對象
- 17. 沒有會話持久性Laravel
- 18. 沒有EntityManager的持久性提供者
- 19. 沒有Getters的DDD對象持久性
- 20. 持久性Java數據庫
- 21. 房間持久性庫 - 帶有列表<Video>的嵌套對象,@Embedded不起作用。
- 22. NServiceBus 4.0沒有nHibernate的Oracle持久性
- 23. java beans:持久性字段和持久性屬性之間的區別?
- 24. 沒有持久性提供的EntityManager
- 25. 沒有EntityManager的持久性提供者
- 26. 無法配置EntityManagerFactory(沒有持久性)
- 27. Emscripten和持久性
- 28. 持久性和MongoDB
- 29. SOAP和持久性
- 30. dojo.tree沒有節點持久性
支持唯一約束,請檢查索引和唯一性,https://developer.android.com/topic/libraries/architecture/room.html – USKMobility