我有一个Spring Boot 2应用程序,它在Oracle数据库上使用Spring Data,并且在实体中发生以下问题。
首先,我尝试编写以下代码:
@JsonProperty(value = "taxonomy_id")
public long getTaxonomyId()
{
return taxonomy.getId();
}
并且注意到该应用程序无法启动(如果我没记错的话,可以使用Intellij播放按钮执行maven srpingboot:run)。
删除了 @JsonProperty ,将返回值更改为1 。仍然无法正常工作。
将函数名称更改为其他任何名称(例如,像getTaxonomyID一样)并将其设置为private也可以使应用重新启动。
崩溃前我唯一得到的是:
2019-01-24 10:30:09 INFO org.hibernate.dialect.Dialect-HHH000400:使用方言:org.hibernate.dialect.Oracle10gDialect
2019-01-24 10:30:12 INFO com.zaxxer.hikari.HikariDataSource-HikariPool-1-已启动关机...
2019-01-24 10:30:12 INFO com.zaxxer.hikari.HikariDataSource-HikariPool-1-关闭已完成。
2019-01-24 10:30:12信息o.a.catalina.core.StandardService-停止服务[Tomcat]
2019-01-24 10:19:51警告oacloader.WebappClassLoaderBase-Web应用程序[sacs]似乎已启动名为[oracle.jdbc.driver.BlockSource.ThreadedCachingBlockSource.BlockReleaser]的线程,但未能停止它。这很可能造成内存泄漏。线程的堆栈跟踪:
java.base@10.0.1/java.lang.Object.wait(本机方法) app // oracle.jdbc.driver.BlockSource $ ThreadedCachingBlockSource $ BlockReleaser.run(BlockSource.java:327)
以退出代码1完成的过程
我尝试在其他任何地方寻找此名称的其他用法,但这是唯一可以找到的地方。
那么,有什么线索吗?我特别想知道为什么会这样,因为可以通过更改名称来解决它,即使这个名称最合适,并记录下一个奇怪的行为,以备下一次使用。
更新1 :经过一点调试:
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“ myAppLauncher”的bean时出错:通过字段“ mOracleDataService”表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件[C:\ myApp \ OracleDataService.class]中定义的名称为“ oracleDataService”的bean时出错:通过构造函数参数2表示的不满足的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为'categoryRepo'的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:无法创建方法公共抽象java.util.List myApp.repository.CategoryRepo.findByTaxonomyId(java.lang.Long)的查询!在此ManagedType [myApp.entity.TreeStructure]上找不到具有给定名称[taxonomyId]的属性
因此,这里有一些上下文: getTaxonomyId 在 Category 类中。 类别和分类学都扩展了 TreeStructure ,这是一个抽象类:
@MappedSuperclass
public abstract class TreeStructure<T extends TreeStructure>
{
public abstract long getId();
// [...]
}
所以看来我的 getTaxonomyId 与 CategoryRepo.findByTaxonomyId(java.lang.Long)中的那个发生了冲突?甚至更奇怪:它似乎正在 TreeStructure 中寻找 taxonomyId ,而不是在 Category
中寻找更新2:确实将 findByTaxonomyId 更改为 findByTaxonomy_Id 可以解决此问题。
所以看来,春季,当我创建吸气剂 getTaxonomyId 并尝试创建 findByTaxonomyId 查询时,认为 taxonomyId 是类别(即使它没有被声明为一个),这就是为什么它创建失败的原因?
非常感谢!