Hibernate,InteliJ-生成持久性映射,错误的表名

时间:2018-10-17 11:50:10

标签: java sql-server hibernate azure intellij-idea

我将休眠与InteliJ Idea Ultimate一起使用,每次尝试生成表的持久性映射时,它都会使用略有错误的@Table名称来生成它们

My database structure - IMGUR IMAGE

所以我对“活动”表的正确表名应该是:“ [dbo]。[活动]”

但是InteliJ会这样生成它:

@Table(name = "Modules", schema = "dbo", catalog = "test-V4ClientDb")

它会导致无法检索数据的错误:

  

错误:“-”附近的语法不正确。   org.hibernate.exception.SQLGrammarException:无法提取   结果集           在org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)           在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)           在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)           在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)           在org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79)           在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:434)           在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:186)           在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:121)           在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)处           在org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:167)           在org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4004)           在org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508)           在org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478)           在org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)           在org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:278)           在org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)           在org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)           在org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1220)           在org.hibernate.internal.SessionImpl.access $ 1900(SessionImpl.java:203)           在org.hibernate.internal.SessionImpl $ IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2767)           在org.hibernate.internal.SessionImpl $ IdentifierLoadAccessImpl.load(SessionImpl.java:2741)           在org.hibernate.internal.SessionImpl.get(SessionImpl.java:1056)           在hibernate.DatabaseManager.retrieveModuleFromDatabase(DatabaseManager.java:82)           在hibernate.DatabaseManager.populateDatabase(DatabaseManager.java:58)           在Runner.TestRunner.setUp(TestRunner.java:30)           在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处           在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)           在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)           在java.lang.reflect.Method.invoke(Method.java:498)           在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)           在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)           在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)           在org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)           在org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)           在org.junit.runners.ParentRunner.run(ParentRunner.java:363)           在Cucumber.api.junit.Cucumber.run(Cucumber.java:100)           在org.junit.runner.JUnitCore.run(JUnitCore.java:137)           在org.junit.runner.JUnitCore.run(JUnitCore.java:115)           在org.testng.junit.JUnit4TestRunner.start(JUnit4TestRunner.java:81)           在org.testng.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:69)           在org.testng.TestRunner $ 1.run(TestRunner.java:697)           在org.testng.TestRunner.runJUnitWorkers(TestRunner.java:1004)           在org.testng.TestRunner.privateRunJUnit(TestRunner.java:728)           在org.testng.TestRunner.run(TestRunner.java:629)           在org.testng.SuiteRunner.runTest(SuiteRunner.java:366)           在org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)           在org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)           在org.testng.SuiteRunner.run(SuiteRunner.java:268)           在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)           在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)           在org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)           在org.testng.TestNG.runSuitesLocally(TestNG.java:1169)           在org.testng.TestNG.run(TestNG.java:1064)           在org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:135)           在org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:112)           在org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:99)           在org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:146)           在org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:383)           在org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:344)           在org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:125)           在org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:417)   引起原因:com.microsoft.sqlserver.jdbc.SQLServerException:不正确   '-'附近的语法。           在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:254)           在com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1608)           在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:578)           在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement $ PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:508)           在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)           在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)           在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:243)           在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:218)           在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:434)           在org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)           ...还有56个

是否可以配置InteliJ以使用正确的命名?

我正在使用Microsoft Azure sql服务器。

谢谢。

编辑

如果未指定“目录”,则也可以使用

@Table(name = "Modules", schema = "dbo")

所以问题仍然是,如何配置InteliJ休眠工具以使用正确的命名。

1 个答案:

答案 0 :(得分:0)

您似乎无法在目录字符串中使用字符“-”。