Как я могу получить имя базы данных, к которой я подключен через Hibernate? - PullRequest
2 голосов
/ 04 мая 2009

Я пытаюсь получить имя базы данных, к которой я подключен в SQL Server. Я пытался сделать:

Query query = session.createQuery("SELECT db_name()");
List<String> dbNames = query.list();

Однако я получил следующую ошибку:

[ERROR PARSER:35] *** ERROR: <AST>:0:0: unexpected end of subtree
Exception in thread "main" java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'db_name' {originalText=db_name}
    \-[EXPR_LIST] SqlNode: 'exprList'

Как я могу получить имя базы данных, к которой я подключен?

Ответы [ 2 ]

6 голосов
/ 04 мая 2009

Вы можете либо:

  1. Создайте собственный SQL-запрос, используя session.createSQLQuery(...). Вы можете извлечь одну строку результатов с помощью uniqueResult().

  2. Получите JDBC Connection из Session и извлеките строку подключения из метаданных базы данных. Я полагаю, что для SQL Server вам нужно проанализировать connection.getMetaData().getURL(), чтобы извлечь действительное имя базы данных.

Обратите внимание, что Session.connection() считается устаревшим, и вы должны использовать Session.doWork().

1 голос
/ 04 мая 2009

AFAIK, вы не можете вызывать функции базы данных NAtive таким образом. Попробуйте использовать собственный запрос вместо простого запроса: http://www.roseindia.net/hibernate/hibernate-native-sql.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...