Что такое Hibernate-эквивалент "select 1 from DUAL"? - PullRequest
5 голосов
/ 21 октября 2011

Что такое минимальный запрос Hibernate? Есть ли эквивалент «выберите 1 из ДВОЙНОГО» для Hibernate?

Я пишу функцию проверки работоспособности и хотел бы выполнить минимальный запрос, но использую HQL для сохранения переносимости кода (в отличие от использования собственного запроса).

Ответы [ 5 ]

4 голосов
/ 26 мая 2013

Динамический нативный SQL-запрос будет работать для него.например - session.createSQLQuery("Select 1 from dual").uniqueResult();

Также вы можете запросить существующую таблицу, например

session.createQuery("select 1 from existingTable").setMaxResults(1).uniqueResult();
4 голосов
/ 21 октября 2011

Диалекты Hibernate - это то, что переводится в различные базы данных, и в диалектах нет поддержки запросов "проверки работоспособности" или "проверки". Такие вещи обычно выполняются пулом соединений, а не Hibernate. См., Например, свойство запроса проверки DBCP .

4 голосов
/ 22 октября 2011

SQL select 1 from DUAL; не очень хорошая проверка работоспособности, единственное, что вы видите, это ответ сервера, который не сообщает, исправны ли сами данные. Но если вы хотите задать такой вопрос, просто создайте свой собственный объект данных, который имитирует DUAL, и вы управляете объектом, и вы останетесь универсальными для любой СУБД.

Что-то вроде

@Entity
@Table(name="myDual")
public class MyDual implements Serializable {

  @Id
  @Column(name = "id")
  Integer id;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

}

Не забудьте использовать CacheMode.IGNORE или CacheMode.REFRESH для форсирования запроса. В противном случае вы можете проверить кеш, а не базу данных ...

2 голосов
/ 27 июля 2017

Для собственных запросов и для проблемы отображения таблиц DUAL, необходимо создать запрос с Hibernate

session.createSQLQuery("SELECT 1 from DUAL") 

, а не с

session.createQuery("SELECT 1 from DUAL").
1 голос
/ 21 октября 2011

Хм, для переносимости, select 1 from dual не собирается портировать на некоторые БД, поскольку у них нет dual. Стандартные представления Information_schema по стандарту ANSI могут быть опцией, но опять же нет гарантии, что все возможные БД, с которыми вы можете работать, будут иметь их - но это может иметь лучшие шансы.

...