Как писать собственные запросы SQL в Hibernate без жесткого кодирования имен и полей таблиц? - PullRequest
4 голосов
/ 20 апреля 2010

Иногда вам нужно написать некоторые из ваших запросов на собственном SQL, а не на спящем HQL. Есть ли хороший способ избежать жесткого кодирования имен и полей таблиц и получения этих данных из существующего отображения?

Например, вместо:

String sql = "select user_name from tbl_user where user_id = :id";

что-то вроде:

String sql = "select " + Hibernate.getFieldName("user.name") + " from " + Hibernate.getTableName(User.class) + " where " + Hibernate.getFieldName("user.id") + " = :id";

1 Ответ

5 голосов
/ 20 апреля 2010

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

AbstractEntityPersister metadata = 
    (AbstractEntityPersister) sessionFactory.getClassMetadata(User.class);
String tableName = metadata.getTableName();
String[] columnNames = metadata.getKeyColumnNames();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...