使用Hibernate JPA和postgresql配置Spring Boot

时间:2017-12-19 18:11:01

标签: postgresql hibernate spring-boot spring-data-jpa hibernate-mapping

我是Spring Boot的新手,但我有Spring的经验。

我有一个有效的启动Spring Boot项目。现在我想将它连接到Postgres DB并能够使用常规查询。我们经常在Spring中编写以下类型的代码(在DAO中):

@Autowired 
SessionFactory factory;

    @Override
    public String daoFunction1() {
        Session session = null;
        try{
            session = factory.openSession();
            Query query = session.createQuery("from Employee where employeeId=10");
            //where Employee is a model/persistance class already added
            Employee result = (Employee)query.list();
    .....//whatever else is required follows
    }

    //OR

    @Override
    public String daoFunction1() {
        Session session = null;
        try{
            session = factory.openSession();
            Query query = session.createSQLQuery("Select * from cametaschema.test");
            List<Object[]> result = query.list();
    .....//whatever else is required follows
    }

问题:有人可以告诉我在Spring Boot中执行相同操作的标准方法是什么,以及在不同文件中添加所有内容(如所有依赖项和注释等)。

我知道你把所有的代码放在这里为汤姆迪克和哈利喜欢我会花费太多时间,但你的回答只是用文字说(在那里包括这个)可以让我的一天和我的夜晚保存:)

请注意我希望能够在使用相同会话时使用HQL查询和本机SQL查询。我不想为本机SQL查询使用实体管理器进行HQL和会话(如上所述)。

我一直在互联网上搜索很长时间,但没有人清楚地告诉我想要得到什么(我知道可能是我无法获得适当的资源,因为这是一个非常普遍的事情)。大多数教程只显示使用CRUDRepository等配置Hibernate JPA。

任何建议对我都有很大的帮助

提前致谢!!

2 个答案:

答案 0 :(得分:0)

继续编写这种daoFunctionN-s,因为Spring Boot并不会阻止你这样做。 Spring Boot的目的是提供开箱即用的大量功能,而无需编写大量的样板代码和配置。

答案 1 :(得分:0)

@Nikolay肯定回答说要让我按照标准行事,并充分利用Spring Boot。但受到mu组织建议的约束,我必须做类似于Spring的工作。以下是我最终实现的目标。

  1. 通过在配置中注入以下bean来获取会话工厂:

    @Bean public SessionFactory sessionFactory(@Qualifier(&#34; entityManagerFactory&#34;)EntityManagerFactory emf){return emf.unwrap(SessionFactory.class); }

  2. 将EntityScan和ComponentScan添加到配置类

    @EntityScan(basePackages = {&#34; com.app.persistence&#34;} @ComponentScan(basePackages = {&#34; com.app&#34;})

  3. 继续使用任何HQL查询,就像Spring:

    @Autowired     SessionFactory工厂;

    @Override
    public String check() {
        Session session = null;
        try {
            session = factory.openSession();
            Query query = session.createQuery("from Test");
            List<Test> res = query.list();
            Test sing = res.get(0);
            return sing.getName();
    
        } catch (Exception e) {
            System.out.println("Exception in Dao");
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }
    
  4. 注意:我假设已经完成了配置DataSource等所有其他事情。

    如果我的理解或方式错误,任何人都可以随意纠正我。

    但这样对我来说效果很好!! :)