什么是hibernate查询的sql等价物

时间:2011-03-26 12:08:19

标签: java hibernate spring

我需要使用以下查询,但我无法使用spring注入,所以我需要在简单的sql中进行查询。

如何创建不使用sessionfactory和任何其他bean的命令

其中注册是我的实体类,包含用户名和密码

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 个答案:

答案 0 :(得分:2)

您的示例中没有特定于Spring的代码。 SessionFactory是一个Hibernate接口,你需要Hibernate来将你的实体映射到数据库或从数据库映射。 Hibernate执行的SQL查询类似于

select * from registration where email = 'email'

*是映射列和参数中给出的电子邮件。

如果您真的需要摆脱Hibernate,包括所有映射逻辑和会话处理,您可以自己构建映射using plain JDBC以发出SQL查询并将ResultSet映射到{{1你自己。当然,这比使用像Hibernate这样的ORM要麻烦得多。

答案 1 :(得分:1)

设置

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

hibernate.cfg.xml

它打印在控制台上执行的每个查询。

答案 2 :(得分:0)

首先,由于您有实体,因此无需进行sql查询。 Hibernate不依赖于Spring来获取SessionFactory,所以你不必考虑“ beans ” 根据您的配置(我假设其基于注释),您可以创建类似于 -

的会话工厂
SessionFactory sessionFactory = new AnnotationConfiguration()
                                        .configure("classpath/hibernate.cfg.xml")
                                        .buildSessionFactory();

如果它不是基于注释,那么你可以使用

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

this link may help.

作为旁注 - 如果你仍然愿意解雇sql(虽然不推荐),然后在普通的JDBC中进行。