Java 是否可以在Android房间中使用字符串作为主键

Java 是否可以在Android房间中使用字符串作为主键,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,我在java后端服务器中使用uuid。所以我需要在房间android中使用uuid来确保实体正确同步。 我意识到了这一点。我想创造这样的东西 @Entity(tableName = CrewColumns.TABLE_NAME) @TypeConverters(BigDecimalConverter::class) @JsonIgnoreProperties(ignoreUnknown = true) class Crew() { constructor (uuid: String) :

我在java后端服务器中使用uuid。所以我需要在房间android中使用uuid来确保实体正确同步。 我意识到了这一点。我想创造这样的东西

@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 = ""
}

房间(DAO等)会有问题吗?谢谢。

是的,您可以使用
字符串作为
@PrimaryKey

此外,我还建议使用Kotlin的
数据类来简化实体。例如:

@Entity
data class Crew(@PrimaryKey val uuid: String, val name: String) {
    // Put any functions or other members not initialized by the constructor here
}

您当然可以使用字符串作为主键。您在试用时遇到了什么具体问题?@commonware当前无。@Juanmean而kotlin呢?我们是否也必须对非null进行注释?@mochadwi无需注释,因为该语言已经有了一种指示字符串不可为null的方法。如果执行了插入,并且主键的类型为String,那么返回类型将是什么?它是否也可以是String类型?比如,下面的节目@插入(onConflict=onConflict策略替换)单个插入(乘员);