使用休眠的本机查询
Posted
技术标签:
【中文标题】使用休眠的本机查询【英文标题】: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中,我将如何称呼这个查询,请告知
【问题讨论】:
【参考方案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
【讨论】:
以上是关于使用休眠的本机查询的主要内容,如果未能解决你的问题,请参考以下文章