0

我有一个查询,我正在使用 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 我怎么称呼这个查询请指教

4

1 回答 1

0

所以简短的回答是你不要在你的 pojo 中放任何这种代码,从这里阅读什么是实体 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,该 bean 将是单例的,并且每个人都使用它的实例。因此,无论何时您想拨打电话,都可以从该服务中拨打电话。

也看到这个很棒的答案

于 2013-07-29T04:21:04.363 回答