Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate和postgresql中读取名称中带有冒号(:)的列_Java_Hibernate_Annotations_Syntax Error_Colon - Fatal编程技术网

Java 如何在hibernate和postgresql中读取名称中带有冒号(:)的列

Java 如何在hibernate和postgresql中读取名称中带有冒号(:)的列,java,hibernate,annotations,syntax-error,colon,Java,Hibernate,Annotations,Syntax Error,Colon,很抱歉,这可能是一个非常简单的问题,我搜索了一下,没有找到关于我的具体案例的任何信息 我得到了一个postgre数据库,其中有一个表,其中有一列名为: 地址:城市 因为我不能在java类变量中使用冒号,所以我尝试用以下方式表示它: @Column(name = "addr:city") private String addrCity; 遗憾的是,这不起作用,我得到了以下异常(我为异常文本中的德语感到抱歉,我不知道为什么是这种方式-翻译它意味着:(冒号)处的语法错误): 错误:FEHLER:Sy

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

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

地址:城市

因为我不能在java类变量中使用冒号,所以我尝试用以下方式表示它:

@Column(name = "addr:city")
private String addrCity;
遗憾的是,这不起作用,我得到了以下异常(我为异常文本中的德语感到抱歉,我不知道为什么是这种方式-翻译它意味着:(冒号)处的语法错误):

错误:FEHLER:Syntaxfehler bei»:«位置:线程中52异常 “main”org.hibernate.exception.sqlgrammareexception:FEHLER: Syntaxfehler bei»:«位置:52 at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122) 在 org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) 在 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(未知源)处 org.hibernate.loader.loader.getResultSet(loader.java:1978)位于 org.hibernate.loader.loader.doQuery(loader.java:829)位于 org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:289) 位于org.hibernate.loader.loader.doList(loader.java:2463) org.hibernate.loader.loader.doList(loader.java:2449)位于 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.list(SessionImpl.java:1115) org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)位于 database.BerlinPolygonDAO.getBerlinLocationByID(BerlinPolygonDAO.java:52) 在databaseAccess.Tester.main(Tester.java:33)处,由以下原因引起: org.postgresql.util.psqleexception:FEHLER:Syntaxfehler bei»:«
职位:52 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) 在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886) 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:601) org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ... 还有16个

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

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

@Column(name = "addr::city")
private String addrCity;
然后我得到一个例外,列“addr”(因此没有冒号和其他字符)不存在

有人能告诉我读这篇专栏需要做什么吗?非常感谢你和我分享的每一个想法和想法

编辑:我找到了与我现在处理的专栏和冒号问题完全相同的相关问题,但在hibernate中不是。我在想这是否会有所帮助

我解决了我的问题

如果postgresql中的列名中有冒号,并且您尝试使用hibernate读取它,则需要如下声明:

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

您是否只使用了一个反斜杠?一个反斜杠给我一个编译器错误,带有“无效的转义序列(有效的是\b\t\n\f\r\”\)“。谢谢您的评论。我会将
name
参数构建为字符串,并在注释中引用该字符串。如果这不起作用,我会尝试将冒号引用为
char
,首先使用单引号,然后引用
char冒号=':'字段。(显然,我只是在猜测,但在接下来的几周里我还有Hibernate的东西要期待,我从来没有用过它…:\)谢谢你的评论!我尝试过这个,但遗憾的是它给了我一个“org.postgresql.util.psqleexception:FEHLER:Syntaxfehler bei»\«”异常(“Error:Syntaxerror at»\«”),与我尝试使用两个反斜杠时的情况相同。嗯,我不能用Hibernate进行测试,但是其他注释确实接受字符串中的冒号(
@RequestMapping(value=“test:test”)
工作正常),并且没有迹象表明
@Column
注释的行为特别不同,所以我打赌这是Hibernate的SQL翻译(HSQL)。不过,我刚刚检查了您的编辑,我想知道您是否尝试过
@Column(name=“'addr:city'”)
,是否可行。(还有,我会离开你——我的猜测可能没有帮助。)我很高兴我能成为你的缪斯女神
@Column(name = "\"addr:city\"")
private String addrCity;