【问题标题】:using native query of hibernate使用休眠的本机查询
【发布时间】:2013-07-27 16:45:33
【问题描述】:

我有一个查询是,我正在使用 Hibernate,我必须检索记录,查询包括不同表之间的内部连接和 某些条件如下所示..

SELECT ru.* FROM rruser ru
inner join rruser_group rg ON ru.id = rg.user_id
inner join rrgroup_permission rgp ON rg.group_id = rgp.group_id
inner join rrpermission rp ON rgp.permission_id = rp.id WHERE ru.ACTIVE_FLAG='Y' AND rp.name='write'

现在我想将它嵌入到休眠中,所以我希望它被用作休眠的本机查询,就像这样..

Query query = session.createSQLQuery("SELECT ru.* FROM rruser ru
inner join rruser_group rg ON ru.id = rg.user_id
inner join rrgroup_permission rgp ON rg.group_id = rgp.group_id
inner join rrpermission rp ON rgp.permission_id = rp.id WHERE ru.ACTIVE_FLAG='Y' AND rp.name='write'")
List result = query.list();

如上所示,它将返回一个对象数组,现在请告知我是否可以在我的其他 pojo 中使用它,我需要这些记录由上述查询过滤,因为我需要在另一个 pojo 中查询的最终记录在那个pojo中,我将如何称呼这个查询,请告知

【问题讨论】:

    标签: hibernate orm


    【解决方案1】:

    所以简短的回答是你不要在你的 pojo 中放任何这种代码,从here 阅读什么是实体 bean。所以你的 bean 可以有字段、getter 和 setter 以及关系,仅此而已。来自链接的示例 pojo:

    @Entity
    public class Customer {
    
    
    
        String name;
    
          public String getName () {
            return name;
          }
    
          public void setName (String name) {
            this.name = name;
          }
    
          int age;
    
          public int getAge () {
            return age;
          }
    
          public void setAge (int age) {
            this.age = age;
          }
    
          Date signupdate;
    
          public Date getSignupdate () {
            return signupdate;
          }
    
          public void setSignupdate (Date signupdate) {
            this.signupdate = signupdate;
          }
        }  
    

    那么你想把代码放在哪里,所以你想把它放在服务层,在那里它将是事务性的。 示例:

        @Transactional
        public class MyServiceImpl implements MyService {
            private MyDao myDao;
            private EntityManager em; 
    
            public List selectSomeData() {
                Query query = session.createSQLQuery("SELECT ru.* FROM rruser ru
    inner join rruser_group rg ON ru.id = rg.user_id
    inner join rrgroup_permission rgp ON rg.group_id = rgp.group_id
    inner join rrpermission rp ON rgp.permission_id = rp.id WHERE ru.ACTIVE_FLAG='Y' AND rp.name='write'")
    return query.list();
            }
            ...
        }
        }
    

    您将在应用程序上下文中创建这个 bean,它将是单例的,每个人都使用它的实例。因此,无论何时您想拨打电话,都可以从该服务中拨打电话。

    也看到这个很棒的answers

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 1970-01-01
      • 2011-08-10
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多