Как прочитать колонку с двоеточием (:) в его названии в hibernate и postgresql

Извините за то, что это может быть очень простой вопрос, я искал и не нашел ничего о моем конкретном случае.

Мне дали базу данных postgre, в которой у меня есть таблица с колонкой:

адр: город

Так как я не могу использовать двоеточия в переменных класса Java, я попытался представить это следующим образом:

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

К сожалению, это не сработало, я получаю следующее исключение (извините за немецкий язык в тексте исключения, я не знаю, почему это так - в переводе это означает синтаксическую ошибку в: (двоеточие)):

ОШИБКА: FEHLER: Syntaxfehler bei ":" Позиция: 52 Исключение в потоке "main" org.hibernate.exception.SQLGrammarException: FEHLER: Syntaxfehler bei ":" Позиция: 52 в org.hibernate.exception.internal.SQLStateConversionDelegate.ververt(SQLState).java:122) в org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) в org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.javag: h5).engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) в org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:12ternal.en.in.h.in.in.g.in.g.in.g.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) в $Proxy12.executeQuery(Неизвестный источник) в org.hibernate.loader.Loader.getResultSet(Loader.java:1978) в org.hibernate.loader.Loader.doQuery(.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.inll.Session 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.PSQLException: FEHLER: Syntaxfehler bei ":"
Позиция: 52 в org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) в org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.g.gr.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) в org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) в org.postgresql.jithj.jj.jt.jg.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302) в sun.reflect.NativeMethodAccessorImpl.invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.invokejl: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;

Также не помогло использование двух двоеточий:

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

Тогда я получаю исключение, что столбец "addr" (то есть без двоеточия и всего остального) не существует.

Может кто-нибудь сказать мне, что мне нужно сделать для чтения этой колонки? Большое спасибо за каждую мысль и идею, которую вы поделитесь со мной.

РЕДАКТИРОВАТЬ: Я нашел этот связанный вопрос, который касается точно такой же столбец, с которым я имею дело сейчас, и проблема с двоеточием, но не в спящем режиме. Я думаю, может ли это как-то помочь.

1 ответ

Решение

Я решил свою проблему.

Если в столбце столбца в postgresql есть двоеточие, и вы пытаетесь прочитать его с помощью hibernate, вам нужно объявить его следующим образом:

@Column(name = "\"addr:city\"")
private String addrCity;
Другие вопросы по тегам