【问题标题】:Insert One to Many Relationship using Room Persistence Library使用房间持久性库插入一对多关系
【发布时间】:2018-07-06 11:42:25
【问题描述】:

我有一种情况,我想使用 Room 持久性库以一对多的关系在 Master (store_master) 和 Mapping (store_mapping) 表中插入数据。我的实现如下:

@Entity(tableName = "store_master")
class Store {

@PrimaryKey(autoGenerate = true)
public var store_id: Int = 0

@SerializedName("name")
lateinit var store_name: String
}

@Entity(tableName = "store_mapping", foreignKeys = arrayOf(
    ForeignKey(entity = Store::class,
            parentColumns = arrayOf("store_id"),
            childColumns = arrayOf("pic_id"),
            onDelete = CASCADE)))
class StorePicture(@field:PrimaryKey(autoGenerate = true)
          @ColumnInfo(name = "id") var id: Int,
          @SerializedName("pic_id") var pic_id: Int?,
          @SerializedName("image") var storage_picture: String?)

 class StoreWithPictures {
    @Embedded
    var store: Store? = null

    @Relation(parentColumn = "store_id",
        entityColumn =  "pic_id")
    var pictures: List<StorePicture> = ArrayList()
}

为了获取带有图片的商店,我的实现如下:

@Transaction
@Query("SELECT * FROM store_master  ORDER BY store_master.storage_id DESC")
fun loadAll(): List<StoreWithPictures>

上述方法适用于从主表和映射表中获取数据,但我无法以相同的方式插入(即使用 @Embeded 和 @transaction 注释)。

【问题讨论】:

    标签: android android-sqlite android-room android-architecture-components android-jetpack


    【解决方案1】:

    我已经用@Transaction 注释解决了这个问题。

     @Transaction
    fun insertStoreWithPictures(store: Store, pictures: List<StorePicture>) {
    
        insertStore(store)
        insertPictures(pictures)
    
    }
    

    使用@Transaction 注释方法可确保所有数据库 您在该方法中执行的操作将在其中运行 交易。抛出异常时事务将失败 方法体。

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2018-01-22
      相关资源
      最近更新 更多