【问题标题】:configuring Spring Boot with Hibernate JPA and postgresql使用 Hibernate JPA 和 postgresql 配置 Spring Boot
【发布时间】:2018-06-02 05:42:27
【问题描述】:

我是 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 中执行相同操作的标准方法是什么,以及为此我需要在不同文件中添加什么(例如所有依赖项和注释等)。强>

我知道你把所有代码放在这里为像我这样的 Tom Dick 和 Harry 会花费太多时间,但你的回答只是用文字(说包括这个)可以让我的一天和我的夜晚节省:)

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

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

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

提前致谢!!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • Shevchenko - 好的,我同意我的理解不正确,但请告诉我如何在 Spring Boot 中实现这一点。我只想同时使用 HQL 和 Native SQL。
    【解决方案2】:

    @Nikolay 肯定会回答让我走上遵循标准并充分利用 Spring Boot 的轨道。但是受 mu 组织建议的约束,我不得不做一些类似于我们在 Spring 中所做的事情。这是我最终实现它的方法。

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

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

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

      @EntityScan(basePackages = { "com.app.persistence"} @ComponentScan(basePackages = { "com.app" })

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

      @自动连线 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();
              }
          }
      }
      

    注意:我假设配置 DataSource 等其他事情都已经处理好了。

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

    但是这种方式对我来说效果很好! :)

    【讨论】: