有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案