Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA、Spring数据和Kotlin-保存记录_Jpa_Spring Data Jpa_Kotlin - Fatal编程技术网

JPA、Spring数据和Kotlin-保存记录

JPA、Spring数据和Kotlin-保存记录,jpa,spring-data-jpa,kotlin,Jpa,Spring Data Jpa,Kotlin,历史上,我曾在Kotlin手动访问数据,并有一个我一直使用的特定数据结构: interface Id { val id: Int } data class Identity<ID : Id>( id: ID, version: Int ) data class Model<ID : Id, DATA>( identity: Identity<ID>, data: DATA ) 接口Id{ val id:Int } 数据类标识( id:

历史上,我曾在Kotlin手动访问数据,并有一个我一直使用的特定数据结构:

interface Id {
  val id: Int
}

data class Identity<ID : Id>(
  id: ID,
  version: Int
)

data class Model<ID : Id, DATA>(
  identity: Identity<ID>,
  data: DATA
)
接口Id{
val id:Int
}
数据类标识(
id:id,
版本:Int
)
数据类模型(
身份:身份,
数据:数据
)
通过这样做,我可以得到如下DAO:

fun getUserById(id: UserId) : Model<UserId, UserData>()

fun createUser(user: UserData) : Model<UserId, UserData>()
fun getUserById(id:UserId):Model()
fun createUser(用户:UserData):Model()
这通常工作得很好,但这意味着编写和测试DAO更加耗时

对于一个即将到来的项目,我正在考虑使用SpringDataJPA来完成它——这样我就可以将我的模型作为JPA实体来编写,并让SpringData完成所有实际使用它们的繁重工作

问题是——我无法找到一种处理上述数据的简单方法。到目前为止,我所能看到的最好的情况是:

  • 实体将ID存储为本机类型,并使用手动getter将其转换为富类型
  • 采用富类型并委托给具有本机类型的版本的默认接口方法
  • 具有可空ID和版本列的实体对象,这意味着在读回它们时,我总是要对它们进行空检查
基本上是这样的:(注意——这是未经测试的)

@实体
@表(name=“users”)
数据类用户(
@身份证
@列(name=“user\u id”)
@GeneratedValue(策略=GenerationType.SEQUENCE)
private val rawId:Int?=null,
@版本
val版本:Int?=null,
val name:String,
val电子邮件:String,
val已启用:布尔值
) {
valid:UserId?
get()=rawId?.let{UserId(it)}
}
接口用户存储库:CrudRepository{
fun findOne(id:UserId)=findOne(id.id)
}
我能应付的前两个问题——这是一种痛苦,但离世界末日还很远。第三个问题更令人担忧,因为它使我处于这样一种情况:我知道这些值永远不能为null,但我仍然需要在每次访问它们中的任何一个时都将它们视为null

有没有什么方法可以设置JPA和Spring数据,让这种设置正常工作

干杯

@Entity
@Table(name = "users")
data class User(
  @Id 
  @Column(name = "user_id") 
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private val rawId: Int? = null,

  @Version
  val version: Int? = null,

  val name: String,

  val email: String,

  val enabled: Boolean
) {
  val id: UserId?
    get() = rawId?.let { UserId(it) }
}

interface UserRepository : CrudRepository<User, Int> {
  fun findOne(id: UserId) = findOne(id.id)
}