5

我发现 kotlin 中的数字不可序列化。

  1. 第一个问题

设备.kt:

package test.domain

import javax.persistence.*

Entity public class Device {
    public Id GeneratedValue var id: Long = -1
    public var name: String = ""
    ...
}

DeviceRestRepository.kt:

package test.domain

import org.springframework.data.repository.PagingAndSortingRepository
import org.springframework.data.repository.query.Param
import org.springframework.data.rest.core.annotation.RepositoryRestResource

RepositoryRestResource(collectionResourceRel = "device", path = "device")
public trait DeviceRestRepository : PagingAndSortingRepository<Device, Long?> {
    public fun findByName(Param("name") name: String): List<Device>
}

尝试编译此代码时出现错误,因为kotlin.Long不是Serializable

错误:(14, 72) Kotlin:类型参数不在其范围内:应该是“java.io.Serializable”的子类型?

  1. 第二个问题

当我尝试使用java.lang.Long时,我得到了同样的错误:

DeviceRestRepository.kt:

package test.domain

import org.springframework.data.repository.PagingAndSortingRepository
import org.springframework.data.repository.query.Param
import org.springframework.data.rest.core.annotation.RepositoryRestResource

RepositoryRestResource(collectionResourceRel = "device", path = "device")
public trait DeviceRestRepository : PagingAndSortingRepository<Device, java.lang.Long?> {
    public fun findByName(Param("name") name: String): List<Device>
}

警告:(14, 72) Kotlin:不应在 Kotlin 中使用此类。改用 kotlin.Long 。

错误:(14, 72) Kotlin:类型参数不在其范围内:应该是“java.io.Serializable”的子类型?

4

3 回答 3

3

Kotlin 1.0 Beta 1 原语类型是可序列化的:

Int 是可序列化的

现在类型 Int 和其他基本类型在 JVM 上是可序列化的。这应该有助于许多框架。

来自: http ://blog.jetbrains.com/kotlin/2015/10/kotlin-1-0-beta-candidate-is-out/

因此,您不再有任何问题。

于 2015-12-30T22:10:02.480 回答
1

我找到了这个问题的解决方法:

设备.kt:

package test.domain

import javax.persistence.*

Entity public class Device {
    public EmbeddedId var id: DeviceId = DeviceId()
    public var name: String = ""
    ...
}

Embeddable public class DeviceId: Serializable {
    public GeneratedValue var id: Long = -1
}

DeviceRestRepository.kt:

package test.domain

import org.springframework.data.repository.PagingAndSortingRepository
import org.springframework.data.repository.query.Param
import org.springframework.data.rest.core.annotation.RepositoryRestResource

RepositoryRestResource(collectionResourceRel = "device", path = "device")
public trait DeviceRestRepository : PagingAndSortingRepository<Device, DeviceId?> {
    public fun findByName(Param("name") name: String): List<Device>
}

这个用例工作正常

于 2015-09-17T10:30:56.467 回答
0

我偶然发现了同样的问题,我设法通过在 java 中使用我的 Repository 接口来处理它,在那里我将java.lang.Long作为 id 的泛型类型参数。其余的留在 kotlin 中(数据类、服务类等)

于 2015-09-12T09:11:16.420 回答