Criteria比使用JPQL或原始SQL有一些优势,如thisanswer中所述:类型安全;重构友好性;减少对字符串的依赖(但仍然有一些)。还有一个非常大的缺点:它们的可读性较差,而且非常丑陋。是否有用于访问类型安全且可读的关系数据库的(非JPA)JavaAPI? 最佳答案 TimoWestkämperQueryDSL做得很好.这个库提供了一个DSL来查询不同的持久性提供者(JPA、MongoDB、Lucene...)。但我经常使用手工制作的解决方案来简化最常见的查询(列出限制其某些字段的实体),防止我总是写相同的行。对于大多数复
假设我有以下实体:@Entity@Inheritance(strategy=SINGLE_TABLE)@DiscriminatorColumn(name="type")publicabstractclassBaseEntity{privateDatesomeDate;privateDateotherDate;privatebooleanflag;}@Entity@DiscriminatorValue("entity1")publicclassEntity1extendsBaseEntity{privateStringsomeProperty;}@Entity@Discriminator
我正在尝试执行如下查询,通过case语句进行选择并通过相同的case语句进行分组..SelectUSER,(CASEWHENvaluebetween0AND2then'0-2'WHENvaluebetween3AND4then'3-4'ELSE'5+'END)asCASE_STATEMENT,SUM(value).....Groupbyuser,CASE_STATEMENT使用JPA2.0CriteriaAPI和Hibernate。我的测试用例看起来像...CriteriaBuildercb=em.getCriteriaBuilder()CriteriaQuerycq=cb.creat
我在使用JPA2.0的CriteriaBuilder构建动态查询时遇到了一些困难。我猜我有一个很常见的用例:用户提供任意数量的搜索参数X和/或连接:像:selectefromFoowhere(name=X1orname=X2..orname=Xn)CriteriaBuilder的方法或方法不是动态的:Predicateor(Predicate...限制)想法?sample? 最佳答案 在你的情况下,我宁愿使用Expression#in(Collection)避免循环和构建复合Predicate动态:CriteriaBuildercb
我有下面提到的三个类(class)。我正在尝试创建一个规范来过滤链接表中匹配的数据。publicclassAlbum{privateLongid;privateListalbumTags;}publicclassTag{privateLongid;privateStringcategory;}publicclassAlbumTag{privateLongid;privateAlbumalbum;privateTagtag;}在上面给出的模式中,我试图找到的是Album表中所有专辑的列表以及AlbumTag中的链接。我想要实现的SQL,不必相同,如下所示select*fromAlbumA
我有一个像这样使用HibernateCriteria创建的查询:Criteriacriteria=db.getSession().createCriteria(Vendor.class);criteria.addOrder(Property.forName("shortName").asc());ListvendorList=criteria.list();我希望排序不区分大小写,等同于HQL查询FROMVendorveORDERBYlower(ve.shortName)如何使用HibernateCriteria实现这一点? 最佳答案
带有“in”表达式的JPA标准API转换为多个“OR”而不是“in”例如我的主要模型publicclassPerson{...@ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="department_id")privateDepartmentdepartment;...}多对一关系publicclassDepartment{@Id@Column(name="department_id")privateIntegerdepartmentId;@OneToMany(mappedBy="department")privateListperson
我有以下dao方法:@OverridepublicListfindAll(){Sessionsession=sessionFactory.getCurrentSession();Criteriacriteria=session.createCriteria(AdminRole.class);criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);returncriteria.list();}实际上我想从数据库中检索所有条目。有时我会看到重复项。当我添加具有AdminRole的用户时会发生这种情况。我已经读到,当我使用EA
我有一个使用多个连接的Criteria查询,生成的SQL乱序列出了表,因此ON子句引用了一个尚未声明的表。为了重现该问题,我创建了一个包含三个表的小型数据模型:Bill、Event和一个联结表BillEvent(我在问题末尾列出了一个带有实体定义的可运行JUnit测试)。以下Criteria查询因语法错误而失败,因为event1是在引用后声明的。如何重写此查询,以便以正确的顺序声明表?//GetthemostrecentBillEventforabillfinalCriteriacriteria=session.createCriteria(BillEvent.class,"be1")
我不确定如何描述这个问题,所以我认为一个例子是提出问题的最佳方式:我有两个具有多对多关系的表:DriversLicenceLicenceClassLicenceClass是“汽车”、“摩托车”和“中型刚性”之类的东西。如何使用HibernateCriteria找到同时具有“Car”和“Motorbike”LicenceClasses的所有许可证?2008年12月11日更新我发现这可以通过使用自定义ResultTransformer轻松实现。然而,问题是结果转换器只在查询返回结果后才被应用,它实际上并没有成为SQL的一部分。所以我想我现在的问题是“你能做我最初在SQL中描述的事情吗-是否