Spring Data Neo4j 5 的 EntityScan 在使用 Kotlin 时包含伴随对象
Spring Data Neo4j 5's EntityScan includes companion objects when using Kotlin
我正在通过 Spring Boot 2.0.0.M4 使用 Spring Data 5。
我注意到在使用 @EntityScan
并提供包时,它包括扫描由 Kotlin 生成的 'inner' 类。在我下面的示例中,我只有一个 属性,但我也尝试了 companion object { <property here> }
,但它仍然出错。
有没有办法过滤掉 Kotlin 生成的这些内部 类?
这是我得到的异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
完整堆栈跟踪:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'storeController' defined in file [C:\Users\jimpo\IdeaProjects\myboothinventory\mbi-test\target\classes\com\mybusinessincorp\mbitest\web\StoreController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeRepository': Cannot resolve reference to bean 'neo4jMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:745) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:214) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1269) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1126) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:122) ~[spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1245) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1233) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at com.mybusinessincorp.mbitest.MbiTestApplicationKt.main(MbiTestApplication.kt:12) [classes/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeRepository': Cannot resolve reference to bean 'neo4jMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1607) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:275) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1133) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1060) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:832) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:737) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 33 common frames omitted
Caused by: java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at kotlin.reflect.jvm.internal.KClassImpl.reportUnresolvedClass(KClassImpl.kt:289) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.access$reportUnresolvedClass(KClassImpl.kt:42) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor.invoke(KClassImpl.kt:52) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor.invoke(KClassImpl.kt:43) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt:172) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getConstructorDescriptors(KClassImpl.kt:186) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors.invoke(KClassImpl.kt:90) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors.invoke(KClassImpl.kt:43) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(KClassImpl.kt) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:222) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.full.KClasses.getPrimaryConstructor(KClasses.kt:40) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.lambda$discover(PreferredConstructorDiscoverer.java:168) ~[spring-data-commons-2.0.0.RC3.jar:na]
at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_112]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.discover(PreferredConstructorDiscoverer.java:165) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.discover(PreferredConstructorDiscoverer.java:77) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:93) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:74) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jPersistentEntity.<init>(Neo4jPersistentEntity.java:56) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:64) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:44) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:376) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:343) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.lambda$new(Neo4jMappingContext.java:57) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_112]
at java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:175) ~[na:1.8.0_112]
at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1620) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_112]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_112]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_112]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_112]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.<init>(Neo4jMappingContext.java:57) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.repository.config.Neo4jMappingContextFactoryBean.createInstance(Neo4jMappingContextFactoryBean.java:62) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.repository.config.Neo4jMappingContextFactoryBean.createInstance(Neo4jMappingContextFactoryBean.java:31) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:141) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1761) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 40 common frames omitted
我在下面创建了一个示例项目来提供帮助。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mybusinessincorp</groupId>
<artifactId>mbi-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mbi-test</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<kotlin.version>1.1.51</kotlin.version>
</properties>
<dependencies>
<!--<dependency>-->
<!--<groupId>au.com.console</groupId>-->
<!--<artifactId>kassava</artifactId>-->
<!--<version>1.0.0</version>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.jetbrains.kotlin</groupId>-->
<!--<artifactId>kotlin-stdlib</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jre8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
MbiTestApplication.kt
package com.mybusinessincorp.mbitest
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.domain.EntityScan
@SpringBootApplication
@EntityScan("com.mybusinessincorp.mbitest.model")
class MbiTestApplication
fun main(args: Array<String>) {
SpringApplication.run(MbiTestApplication::class.java, *args)
}
/model/Store.kt
package com.mybusinessincorp.mbitest.model
import org.neo4j.ogm.annotation.Index
import org.neo4j.ogm.annotation.NodeEntity
import org.neo4j.ogm.annotation.Transient
@NodeEntity
data class Store(
var id: Long? = null,
@Index(unique = true)
var storeId: Long? = null,
var name: String? = null
) {
@Transient
private val properties = arrayOf(Store::id, Store::storeId, Store::name)
}
/domain/StoreRepository.kt
package com.mybusinessincorp.mbitest.domain
import com.mybusinessincorp.mbitest.model.Store
import org.springframework.data.neo4j.repository.Neo4jRepository
import org.springframework.stereotype.Repository
import org.springframework.transaction.annotation.Transactional
/**
* Repository for [Store]s
* */
@Repository
@Transactional
interface StoreRepository : Neo4jRepository<Store, Long>
/web/StoreController.kt
package com.mybusinessincorp.mbitest.web
import com.mybusinessincorp.mbitest.domain.StoreRepository
import com.mybusinessincorp.mbitest.model.Store
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("stores")
class StoreController
constructor(private val storeRepository: StoreRepository) {
@GetMapping("/", "/allStores")
fun allStores(): Iterable<Store> = storeRepository.findAll(1)
}
application.yml
spring:
application:
name: myboothinventory-test
data:
neo4j:
uri: bolt://localhost:7687
username: neo4j
password: <password>
security:
basic:
enabled: false
此问题已在 Kay 版本中修复。
参见 https://jira.spring.io/browse/DATACMNS-1171。
这似乎也与描述 here.
的科特林错误有关
升级到 Spring Boot 2.0.0.M5 解决了这个问题。
我正在通过 Spring Boot 2.0.0.M4 使用 Spring Data 5。
我注意到在使用 @EntityScan
并提供包时,它包括扫描由 Kotlin 生成的 'inner' 类。在我下面的示例中,我只有一个 属性,但我也尝试了 companion object { <property here> }
,但它仍然出错。
有没有办法过滤掉 Kotlin 生成的这些内部 类?
这是我得到的异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
完整堆栈跟踪:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'storeController' defined in file [C:\Users\jimpo\IdeaProjects\myboothinventory\mbi-test\target\classes\com\mybusinessincorp\mbitest\web\StoreController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeRepository': Cannot resolve reference to bean 'neo4jMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:745) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:214) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1269) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1126) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:122) ~[spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1245) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1233) [spring-boot-2.0.0.M4.jar:2.0.0.M4]
at com.mybusinessincorp.mbitest.MbiTestApplicationKt.main(MbiTestApplication.kt:12) [classes/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'storeRepository': Cannot resolve reference to bean 'neo4jMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1607) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:275) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1133) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1060) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:832) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:737) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jMappingContext': Invocation of init method failed; nested exception is java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=11=](AbstractBeanFactory.java:312) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 33 common frames omitted
Caused by: java.lang.UnsupportedOperationException: This class is an internal synthetic class generated by the Kotlin compiler, such as an anonymous class for a lambda, a SAM wrapper, a callable reference, etc. It's not a Kotlin class or interface, so the reflection library has no idea what declarations does it have. Please use Java reflection to inspect this class: class com.mybusinessincorp.mbitest.model.Store$properties
at kotlin.reflect.jvm.internal.KClassImpl.reportUnresolvedClass(KClassImpl.kt:289) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.access$reportUnresolvedClass(KClassImpl.kt:42) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor.invoke(KClassImpl.kt:52) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor.invoke(KClassImpl.kt:43) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt:172) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getConstructorDescriptors(KClassImpl.kt:186) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors.invoke(KClassImpl.kt:90) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors.invoke(KClassImpl.kt:43) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(KClassImpl.kt) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:222) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at kotlin.reflect.full.KClasses.getPrimaryConstructor(KClasses.kt:40) ~[kotlin-reflect-1.1.51.jar:1.1.51]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.lambda$discover(PreferredConstructorDiscoverer.java:168) ~[spring-data-commons-2.0.0.RC3.jar:na]
at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_112]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.discover(PreferredConstructorDiscoverer.java:165) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.discover(PreferredConstructorDiscoverer.java:77) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:93) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:74) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jPersistentEntity.<init>(Neo4jPersistentEntity.java:56) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:64) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.createPersistentEntity(Neo4jMappingContext.java:44) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:376) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:343) ~[spring-data-commons-2.0.0.RC3.jar:na]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.lambda$new(Neo4jMappingContext.java:57) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_112]
at java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:175) ~[na:1.8.0_112]
at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1620) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_112]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_112]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_112]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_112]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_112]
at org.springframework.data.neo4j.mapping.Neo4jMappingContext.<init>(Neo4jMappingContext.java:57) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.repository.config.Neo4jMappingContextFactoryBean.createInstance(Neo4jMappingContextFactoryBean.java:62) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.data.neo4j.repository.config.Neo4jMappingContextFactoryBean.createInstance(Neo4jMappingContextFactoryBean.java:31) ~[spring-data-neo4j-5.0.0.RC3.jar:na]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:141) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1761) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
... 40 common frames omitted
我在下面创建了一个示例项目来提供帮助。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mybusinessincorp</groupId>
<artifactId>mbi-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mbi-test</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<kotlin.version>1.1.51</kotlin.version>
</properties>
<dependencies>
<!--<dependency>-->
<!--<groupId>au.com.console</groupId>-->
<!--<artifactId>kassava</artifactId>-->
<!--<version>1.0.0</version>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.jetbrains.kotlin</groupId>-->
<!--<artifactId>kotlin-stdlib</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jre8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
MbiTestApplication.kt
package com.mybusinessincorp.mbitest
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.domain.EntityScan
@SpringBootApplication
@EntityScan("com.mybusinessincorp.mbitest.model")
class MbiTestApplication
fun main(args: Array<String>) {
SpringApplication.run(MbiTestApplication::class.java, *args)
}
/model/Store.kt
package com.mybusinessincorp.mbitest.model
import org.neo4j.ogm.annotation.Index
import org.neo4j.ogm.annotation.NodeEntity
import org.neo4j.ogm.annotation.Transient
@NodeEntity
data class Store(
var id: Long? = null,
@Index(unique = true)
var storeId: Long? = null,
var name: String? = null
) {
@Transient
private val properties = arrayOf(Store::id, Store::storeId, Store::name)
}
/domain/StoreRepository.kt
package com.mybusinessincorp.mbitest.domain
import com.mybusinessincorp.mbitest.model.Store
import org.springframework.data.neo4j.repository.Neo4jRepository
import org.springframework.stereotype.Repository
import org.springframework.transaction.annotation.Transactional
/**
* Repository for [Store]s
* */
@Repository
@Transactional
interface StoreRepository : Neo4jRepository<Store, Long>
/web/StoreController.kt
package com.mybusinessincorp.mbitest.web
import com.mybusinessincorp.mbitest.domain.StoreRepository
import com.mybusinessincorp.mbitest.model.Store
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("stores")
class StoreController
constructor(private val storeRepository: StoreRepository) {
@GetMapping("/", "/allStores")
fun allStores(): Iterable<Store> = storeRepository.findAll(1)
}
application.yml
spring:
application:
name: myboothinventory-test
data:
neo4j:
uri: bolt://localhost:7687
username: neo4j
password: <password>
security:
basic:
enabled: false
此问题已在 Kay 版本中修复。 参见 https://jira.spring.io/browse/DATACMNS-1171。 这似乎也与描述 here.
的科特林错误有关升级到 Spring Boot 2.0.0.M5 解决了这个问题。