是否可以在Android Room中使用String作为PrimaryKey

Tho*_*win 11 java android kotlin android-room

我在我的java后端服务器中使用uuid.因此我需要在房间android中使用该uuid以确保实体正确同步.我知道是否有可能在Android的数据库中的文本字段应用的主键文本作为android系统中的PrimaryKey.我想创造这样的东西

@Entity(tableName = CrewColumns.TABLE_NAME)
@TypeConverters(BigDecimalConverter::class)
@JsonIgnoreProperties(ignoreUnknown = true)
class Crew() {
    constructor (uuid: String) : this() {
        this.uuid = uuid;
    }

    /**
     * The unique ID of the item.
     */
    @PrimaryKey
    @ColumnInfo(name = CrewColumns.UUID)
    var uuid: String = ""
    @ColumnInfo(name = CrewColumns.NAME)
    var name: String = ""
}
Run Code Online (Sandbox Code Playgroud)

Room(DAO等)会出现问题吗?谢谢.

jua*_*ile 22

您应该使用android注释中的@NonNull注释该字段.为此,请将此行添加到应用程序的gradle中:

compile 'com.android.support:support-annotations:26.1.0'
Run Code Online (Sandbox Code Playgroud)

然后在代码中它就像:

@Entity
public class User {
    @PrimaryKey
    @NonNull
    private String email;

    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 如果执行插入并且主键是 String 类型,返回类型是什么,是否也可以是 String 类型?喜欢,显示在下面?@Insert(onConflict = OnConflictStrategy.REPLACE) Single<String> insert(船员组); (4认同)
  • @mochadwi不需要,因为该语言已经具有一种指示String不可为空的方式。 (2认同)