Что такое SQL-эквивалент запроса гибернации - PullRequest
0 голосов
/ 26 марта 2011

Мне нужно использовать следующий запрос, но я не могу использовать инжекцию пружины, поэтому мне нужно сделать запрос простым sql.

Как я могу сделать команду, которая не использует sessionfactory и любые другие компоненты

где регистрация - это мой класс сущности с именем пользователя и паролем

public Registration findUserByEmail(String email) {

     try {

          Session session = sessionFactory.getCurrentSession();
          String query = "FROM Registration WHERE email =:email";
          Query query2 = session.createSQLQuery(query); 
          query2.setString("email",email);
          return (Registration) query2.uniqueResult();

     } catch (Exception e) {
                System.out.println(e);
                throw new RuntimeException("DAO failed", e);
            }


    }

Ответы [ 3 ]

2 голосов
/ 26 марта 2011

В вашем примере нет кода для Spring.SessionFactory - это интерфейс Hibernate, и вам потребуется Hibernate для отображения вашей сущности в / из базы данных.SQL-запрос, выполняемый Hibernate, будет выглядеть примерно так:

select * from registration where email = 'email'

, где * - это сопоставленные столбцы и адрес электронной почты, указанный в параметре.

Если вам действительно требуется избавиться от Hibernate, включая всю логику отображения и обработку сеансов, вы можете создать отображение самостоятельно , используя простой JDBC для выдачи SQL-запроса и отображения ResultSetна new Registration() себя.Конечно, это намного сложнее, чем использовать ORM, например, Hibernate.

1 голос
/ 26 марта 2011

Установить

<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>

в вашем hibernate.cfg.xml

Он печатает каждый запрос, выполненный им на консоли.

0 голосов
/ 26 марта 2011

Прежде всего, нет необходимости делать SQL-запрос, так как у вас есть сущность. Hibernate не зависит от Spring для получения SessionFactory, поэтому вам не нужно думать о " beans "
В зависимости от вашей конфигурации (я предполагаю, что она основана на аннотациях), вы можете создать фабрику сессий как -

SessionFactory sessionFactory = new AnnotationConfiguration()
                                        .configure("classpath/hibernate.cfg.xml")
                                        .buildSessionFactory();

и если он не основан на аннотациях, вы можете использовать

sessionFactory = new Configuration().configure().buildSessionFactory();

эта ссылка может помочь.

В качестве дополнительного примечания: если вы все еще хотите запустить sql (не буду рекомендовать), сделайте это простым JDBC.

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