java命名函数getTaxonomyId会使我的应用程序崩溃,所有其他名称都可以
我有一个SpringBoot2应用程序,在Oracle数据库上使用Spring数据,下面的问题发生在一个实体中
首先,我尝试编写以下代码:
@JsonProperty(value = "taxonomy_id")
public long getTaxonomyId()
{
return taxonomy.getId();
}
并注意到该应用程序无法启动(使用Intellij play按钮,该按钮执行maven srpingboot:run,如果我没有弄错的话)
删除了@JsonProperty,将返回更改为1。仍然不起作用
将函数名更改为任何其他名称(例如getTaxonomyID)并将其设置为private也会使应用程序重新启动
在坠机前,我得到的唯一信息是:
2019-01-24 10:30:09 INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
2019-01-24 10:30:12 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
2019-01-24 10:30:12 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
2019-01-24 10:30:12 INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
2019-01-24 10:19:51 WARN o.a.c.loader.WebappClassLoaderBase - The web application [sacs] appears to have started a thread named [oracle.jdbc.driver.BlockSource.ThreadedCachingBlockSource.BlockReleaser] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.base@10.0.1/java.lang.Object.wait(Native Method) app//oracle.jdbc.driver.BlockSource$ThreadedCachingBlockSource$BlockReleaser.run(BlockSource.java:327)
Process finished with exit code 1
我试着在其他地方寻找这个名字的其他用法,但这是唯一可以找到的地方
有线索吗?我特别感兴趣的是知道为什么会发生这种情况,因为修复它可以通过更改名称来完成,即使这个名称是最合适的,并为下一个名称记录这种奇怪的行为
更新1:调试一段时间后:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myAppLauncher': Unsatisfied dependency expressed through field 'mOracleDataService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'oracleDataService' defined in file [C:\myApp\OracleDataService.class]: Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'categoryRepo': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List myApp.repository.CategoryRepo.findByTaxonomyId(java.lang.Long)! Unable to locate Attribute with the the given name [taxonomyId] on this ManagedType [myApp.entity.TreeStructure]
因此,这里有一点上下文:getTaxonomyId属于类别。范畴和分类扩展了树状结构,这是一个抽象类:
@MappedSuperclass
public abstract class TreeStructure<T extends TreeStructure>
{
public abstract long getId();
// [...]
}
因此,我的getTaxonomyId似乎在某种程度上与类别报告中的一个发生冲突。findByTaxonomyId(java.lang.Long)?更奇怪的是:它似乎在树状结构中寻找分类ID,而不是在类别中寻找
更新2:确实将findByTaxonomyId更改为findByTaxonomy\u Id解决了这个问题
因此,当我创建gettergetTaxonomyId并试图创建findByTaxonomyId查询时,Spring似乎认为taxonomyId是类别的一个成员(尽管它没有被声明为一个),这就是它未能创建它的原因
非常感谢
共 (0) 个答案