Kotlin和Spring Data JPA产生PropertyReferenceException

我目前正在使用Spring Data JPA的Kotlin 1.2和Spring Boot 2.0 M7。 在这个项目中,我正在使用一个自定义的基础知识库,而不是JPARepository或PagingAndSortingRepository(实际上并不重要)

这里是基础接口

@NoRepositoryBean interface BaseRepository : Repository { fun  save(entity: S): S fun findOne(id: ID): T? fun findAll(): List fun count(): Long } 

这里是实际的存储库

 interface ArticleRepository : BaseRepository
{ }

最后这里是文章数据类

 @Entity @Table(name = "article") @Cacheable data class Article ( @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) var id: Int? = null, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", nullable = false) var member: Member? = null, @Column(name = "title", nullable = false, length = 200) var title: String = "", @Column(name = "content", nullable = false, length = 65535) var content: String = "", @Column(name = "last_modified", nullable = false, length = 19) var lastModified: LocalDateTime = LocalDateTime.now(), @Column(name = "deleted", nullable = false) var deleted: Boolean = false, @Column(name = "effective_start", length = 19) var effectiveStart: LocalDateTime? = null, @Column(name = "effective_end", length = 19) var effectiveEnd: LocalDateTime? = null, @Version @Column(name = "version", nullable = false) var version: Int = 0 ): Serializable { constructor() : this(null) constructor(member: Member, title: String, content: String, lastModified: LocalDateTime, deleted: Boolean) : this(null, member, title, content, lastModified, deleted) } 

但启动后,我得到这个奇怪的错误

 Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.lang.Object com.nokia.srandu.oms.corrviewer.db.repo.BaseRepository.findOne(java.io.Serializable)! No property findOne found for type Article! . . . Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findOne found for type Article! 

我认为这与https://jira.spring.io/browse/DATACMNS-1223有关,但是我能做些什么来解决这个问题? 将接口转移到Java也没有帮助。

Spring Data 2.0中存储库的方法名称约定已经更改:

fun findOne(…): T? – > fun findById(…): Optional

如果你想继续获得一个简单的可空types,而不是一个Optional ,声明一个额外的或替代的查询方法fun getById(…): T? 它应该按预期工作。