我有一个看起来像这样的Hibernate实体(为了简洁省略了访问器):
@Entity
@Table(name="FeatureList_Version")
@SecondaryTable(name="FeatureList",
pkJoinColumns=@PrimaryKeyJoinColumn(name="FeatureList_Key"))
public class FeatureList implements Serializable {
@Id
@Column(name="FeatureList_Version_Key")
private String key;
@Column(name="Name",table="FeatureList")
private String name;
@Column(name="VERSION")
private Integer version;
}
Run Code Online (Sandbox Code Playgroud)
我想制作一个HQL查询来检索FeatureList的最新版本.以下查询排序:
Select f.name, max(f.version) from FeatureList f group by f.name
Run Code Online (Sandbox Code Playgroud)
问题是不会填充关键字段,我需要包含具有给定FeatureList的最高版本号的记录的键.如果我在select中添加f.key它将无法工作,因为它不在group by或聚合中,如果我把它放在组中,整个停止工作,它只是给我每个版本作为一个单独的实体.
那么,任何人都可以帮忙吗?
Hibernate Criteria支持提供了setMaxResults()一种限制db返回结果的方法.
我在他们的文档中找不到任何答案 - 这是如何实现的?是查询整个结果集然后只返回请求号吗?或者它是否真正限制了数据库端的查询(想想在mySql中的LIMIT关键字).
这很重要,因为如果一个查询可能会返回许多结果,我真的需要知道它是否setMaxResults()仍然会查询数据库中的所有行(这会很糟糕).
另外 - 如果它真正限制了数据库端的行数,它是如何实现这个跨db的(因为我不认为每个rdbms都支持像mySql那样的LIMIT功能).
我有这样的HQL:
from Table1 t1 where t1.name not in (select t2.name from Table2 t2 order by t2.date limit 10)
Run Code Online (Sandbox Code Playgroud)
问题是它不懂limit关键字.有没有办法运行这样的查询而不将其分成两个子查询?
我知道版本太旧了(是的,版本4!),但我别无选择.
如何仅为DB2 AS400限制我的查询例如100行?
FETCH FIRST n ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
和
ROW_NUMBER()
Run Code Online (Sandbox Code Playgroud)
不工作.
任何想法或解决方法?
这是一个示例SQL查询(不起作用):
SELECT POLNOP FROM ZICACPTF.POLHDR FETCH FIRST 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
它说
[SQL0199]不期望关键字FETCH.有效令牌:FOR WITH ORDER UNION OPTIMIZE.
如何设置此hql查询的限制?当我在查询中添加limit关键字时,会引发错误.
@Query("from voucher v where v.voucherType.typeDescription = :typeDescription and v.denomination = :denomination")
public List<Voucher> findByVoucherTypeAndDenomination(@Param("typeDescription") String typeDescription,@Param("denomination") BigDecimal denomination);
Run Code Online (Sandbox Code Playgroud) 有没有人有关于如何从数据库中获取10个随机唯一对象列表的HQL查询?
它应该在数据库中而不是在应用程序中完成.我希望获得比我目前的解决方案更好的性能,这几乎可以提出10个请求来提交列表.
可能重复:
如何在HQL中执行限制查询
我是HQL的新手.我有以下工作HQL查询:
from Order as o where o.account.profile.userId='abc' order by o.orderID desc
Run Code Online (Sandbox Code Playgroud)
此查询返回用户abc下的订单列表.用户可以在DB中放置0到5000+个订单.但我想只显示前5条记录(订单).我正在使用java List的子列表功能.
我可以使用HQL查询直接获取前5条记录吗?哪种写入此查询更有效?
我对Hibernate和JPA非常非常新.我希望能够将ORDER BY和LIMIT子句应用于Hibernate(?)查询,但是我的结果是空的.注意:我继承了这段代码.
这是当前的代码:
public SomeCoolResponse getSomeCoolResponse(String myId) {
String queryString = "select aThing from AWholeBunchOfThings aThing " +
"join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " +
"where saThing.subthing.id = :id";
Query q = getEntityManager().createQuery(queryString);
q.setParameter("id", myId);
List<MyThings> list = q.getResultList();
if(list.size() > 0) {
return list.get(0);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
而不是获取整个列表然后只返回第一个结果(这是我们唯一需要的结果),我希望能够应用一个LIMIT 0,1子句,以便查询更快.此外,查询需要按降序排序,aThing.created这是一个UNIX时间戳整数.
我试过改变queryString这样的:
String queryString = "select aThing from AWholeBunchOfThings aThing " +
"join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " +
"where saThing.subthing.id …Run Code Online (Sandbox Code Playgroud) 我有两个实体:项目和投标,每个项目都有很多投标,因此投标是项目的集合属性。
在显示项目的页面中,我只想显示有关此“项目”的出价的前10条记录。
所以,我这样做查询:
from item
left join fetch item.bids
where item.id=3
...
Run Code Online (Sandbox Code Playgroud)
但这将获取有关某个项目的所有出价,因此,如何限制该项目的出价?