假设我有一个名为HQL(findRoomQuery)的文件:
select r from House h inner join h.roomList r
where h.address = :address and r.roomNo = :roomNo
House实体的映射如下:
<class name="com.example.House" table="house">
<id name="id" column="id" type="long">
<generator class="assigned" />
</id>
<property name="address" column="address" type="string" length="100" not-null="false"/>
<set name="roomList" cascade="none" lazy="false" fetch="join" inverse="true">
<key>
<column name="house_id"/>
</key>
<one-to-many class="com.example.Room"/>
</set>
</class>
虽然Room实体是这样的:
<class name="com.example.Room" table="room">
<id name="id" column="id" type="long">
<generator class="assigned" />
</id>
<property name="houseId" column="house_id" type="long" not-null="true"/>
<property name="roomNo" column="room_no" type="string" length="4" not-null="false"/>
</class>
这种关系是一个房子可以有一个或多个房间。
执行查询的代码如下:
Query query = getSession().createQuery("findRoomQuery")
.setParameter("address", address)
.setParameter("roomNo", roomNo);
return query.list();
您可以从选择r(r是h.room列表的别名)中看到HQL返回房间实体。
如何使用Hibernate条件查询做同样的事情?可能吗?
试试这个
Criteria criteria = session.createCriteria(House.class, "house");
criteria.createAlias("house.roomList", "roomList");
criteria.add(Restrictions.eq("house.address",address));
criteria.add(Restrictions.eq("roomList.roomNo", roomNo));
criteria.setProjection(Projections.property("roomList"));
Room r = (Room) criteria.uniqueResult();
取代
<property name="houseId" column="house_id" type="long" not-null="true"/>
自
<many-to-one name="houseId" class="com.example.House" fetch="select">
<column name="house_id" not-null="true" />
</many-to-one>
问题内容: 我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询: 如何使用hibernate条件对象实现它? 问题答案: 您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria API中的以下方法来构造所需的Criteria对象: 使用setProjection(Projection projection)定义select子句 使用creat
其中“in”是来自用户的输入。 我只从hibernate中的两个表中映射了Emp_Id作为主键,因此hibernate条件将只对该表应用联接,而不对Langcode应用联接。 注意:-我不能更改hibernate映射,只能使用hibernate标准,根据客户的要求,请帮助我。
JPA Criteria似乎坚持认为min()(和max())只适用于数字字段。然而,情况并非如此,因为SQL数据库确实可以从字符串列中选择min()和max()值。我还可以使用JQL选择字符串列的min()或max()值。 但是,当使用条件查询时,编译器会在 min() 与字符串列一起使用时进行报错:绑定不匹配:条件生成器类型的泛型方法 min(表达式)不适用于参数(子查询.get(“strin
我试图使用JPA标准编写以下查询,但我无法选择子查询中的多列。 我陷入了下面的实现过程中,无法找到如何在子查询中选择多个列。请看我在代码中的评论(第三行)。 请帮我解决这个问题。
我正在寻找一种方法,使用带有元模型的jpa criteria查询API来选择父实体的所有子实体。 表族 } 表家庭成员 现在,我想在选择family时选择family的所有子实体,而不是使用更慢的方法来获取所有family的列表,循环列表并填充family member list。 为了实现这个结果qith平原SQL,我写这样一个查询: 现在我的问题是,如何将本机查询转换为criteria API