3

抱歉,这可能是一个非常简单的问题,我搜索并没有找到任何关于我的具体案例的信息。

我有一个 postgre 数据库,其中有一个表,其中有一列名为:

地址:城市

由于我不能在 java 类变量中使用冒号,所以我试图用这种方式表示它:

@Column(name = "addr:city")
private String addrCity;

遗憾的是这不起作用,我得到以下异常(我很抱歉异常文本中的德语,我不知道为什么会这样 - 翻译它意味着:(冒号)处的语法错误):

错误:FEHLER:Syntaxfehler bei »:« 位置:52 线程“主”org.hibernate.exception.SQLGrammarException 中的异常:FEHLER:Syntaxfehler bei »:« 位置:org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate) 中的 52 .java:122) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 在 org.hibernate. engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 在 org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) 在 org.hibernate.engine.jdbc.internal。 proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) 在 $Proxy12.executeQuery(Unknown Source) at org.hibernate.loader.Loader.getResultSet(Loader.java:1978) at org.hibernate.loader.Loader.doQuery(Loader.java:829) at org.hibernate。 loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) at org.hibernate.loader.Loader.doList(Loader.java:2463) at org.hibernate.loader.Loader.doList(Loader.java:2449) at org.hibernate .loader.Loader.listIgnoreQueryCache(Loader.java:2279) 在 org.hibernate.loader.Loader.list(Loader.java:2274) 在 org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 在 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196) 在 org.hibernate.internal.SessionImpl。组织中的列表(SessionImpl.java:1115)。hibernate.internal.QueryImpl.list(QueryImpl.java:101) at database.BerlinPolygonDAO.getBerlinLocationByID(BerlinPolygonDAO.java:52) at databaseAccess.Tester.main(Tester.java:33) 原因:org.postgresql.util.PSQLException : FEHLER: Syntaxfehler bei »:«
位置:在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886) 在 org.postgresql.core.v3 的 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) 的 52。 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) org.postgresql.jdbc2 的 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) 的 QueryExecutorImpl.execute(QueryExecutorImpl.java:255) .AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java :43) 在 java.lang.reflect。Method.invoke(Method.java:601) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ... 16 更多

我在其他一些帖子中读到我应该按照下面的方式转义它,但它对我不起作用(例外只是说“\”存在语法错误)

@Column(name = "addr\\:city")
private String addrCity;

使用两个冒号也无济于事:

@Column(name = "addr::city")
private String addrCity;

然后我得到一个例外,即“addr”列(因此没有冒号和其余部分)不存在。

谁能告诉我阅读本专栏需要做什么?非常感谢您与我分享的每一个想法和想法。

编辑:我发现这个相关的问题涉及我现在正在处理的完全相同的列以及冒号的问题,但不是在休眠状态下。我在想这是否会有所帮助。

4

1 回答 1

1

我解决了我的问题。

如果 postgresql 中的列名中有冒号,并且您尝试使用 hibernate 将其读出,则需要像这样声明它:

@Column(name = "\"addr:city\"")
private String addrCity;
于 2013-05-16T22:43:43.313 回答