将现有的Hibernate实体扩展为具有Kotlin序列化注释的Android Room实体

问题描述 投票:0回答:1

我需要利用现有的数据库结构,该数据库结构与JPA(Jakarta Persistence API)兼容,以通过Hibernate Orm在Spring Boot中使用。 我想基本上将此数据库结构复制为Android Room数据库,还使用Kotlin Serialization插件 /库。 原始数据库库

cannot使用任何Android依赖关系
。 我面临的问题是Android Room数据库中的注释。 我找不到将字段指定为原始Entity的主要密钥的方法。 示例如下...
customerentity.kt- JPA实体类兼容与Spring Hibernate
PrimaryKey

customerandroid.kt-尝试亚班级JPA实体class

Entity

使用使用

@Serializable @Entity @Table( name = CustomerEntity.Constants.TABLE_NAME, indexes = [Index(name = "IX_Customer_CustomerName", columnList = "CustomerName")] ) open class CustomerEntity( @Id @Column(name = Constants.COLUMN_ID_NAME, nullable = false, length = 15) open var id: String = "", @Column(name = Constants.COLUMN_CUSTOMERNAME_NAME, length = 40) var customerName: String = "", ) { object Constants { const val TABLE_NAME: String = "Customer" const val COLUMN_ID_NAME: String = "CustomerID" const val COLUMN_CUSTOMERNAME_NAME: String = "CustomerName" } }
会产生一个问题:

@Serializable
@Entity(tableName = CustomerSchema.TABLE_NAME)
class CustomerAndroid() : CustomerEntity() {
    constructor(
        customerID: String,
        customerName: String = ""
    ) : this() {
        this.id = customerID
        this.customerName = customerName
    }

    @PrimaryKey
    override var id: String = ""
}
我正在试图找到一种将注释附加到Android室中主要钥匙字段的方法,但是我遇到了很多头痛,让这些框架和库彼此效果很好。
	
我能够通过创建一个新的类,其中包含在新类中属于属性的实体上的

override

注释来解决此问题。 这使我能够构建DAO类,可以直接引用实体类中的字段。 这是我能找到的最好的妥协。

示例:
android kotlin jpa android-room kotlinx.serialization
1个回答
0
投票
kotlinx.serialization

dao:

Serializable class has duplicate serial name of property 'id', either in the class itself or its supertypes

如您所见,您可以直接参考

@Embedded

注释中的字段。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.