天道酬勤,学无止境

hibernate-criteria

在 GORM criteriaBuilder 中包含 max 和 offset 标准会返回错误(Including the max and offset criteria inside GORM criteriaBuilder returns an error)

问题 我可以缩短这段代码吗? if(count == null && from = null) { creditAdviceList = CreditAdvice.findAll { ilike('id', "%$idFilter%") ..... ilike('statusCode', statusCodeFilter) } } else if(count != null && from == null) { creditAdviceList = CreditAdvice.findAll(max: count) { ilike('id', "%$idFilter%") ..... ilike('statusCode', statusCodeFilter) } } else if(count == null && from != null) { creditAdviceList = CreditAdvice.findAll(offset: from) { ilike('id', "%$idFilter%") ..... ilike('statusCode', statusCodeFilter) } } else if(count != null && from != null) { creditAdviceList = CreditAdvice.findAll(max: count

2021-09-22 10:23:07    分类:技术分享    grails   grails-orm   hibernate-criteria

接受 %% 值的休眠条件(Hibernate criteria accepting %% value)

问题 我正在使用以下 Hibernate 代码来过滤workFlowName 。 crt.add(Restrictions.like("workFlowName", workFlow, MatchMode.ANYWHERE)); // crt is the criteria 问题是当我将值从 web (TextBox) 传递给workFlow 时,它正确地获取了值(如果获取 10 条记录,我将在文本框中传递sym 。如果我再次传递相同的值,如%sym% ,它将获取相同的记录)。 当它看到%%作为参数时,标准是否会省略? 回答1 Hibernate 不会转义像中的特殊字符(例如百分比%符号)。 但是有描述如何解决它(逃避它) : 在 Hibernate 查询中转义特殊字符使用休眠标准,有没有办法转义特殊字符? 转义休眠条件中的特殊字符 一般来说,我们可以实现我们自己的EscapedILikeExpression (取自上面的第一个链接) class EscapedILikeExpression extends IlikeExpression { private static final String HIBERNATE_ESCAPE_CHAR = "\\"; public EscapedILikeExpression(String propertyName, Object value

2021-09-21 14:06:28    分类:技术分享    java   hibernate   jakarta-ee   orm   hibernate-criteria

如何使用 Hibernate 按投影分组(How to group by projections with Hibernate)

问题 我需要找到属于特定组并位于特定地址的学生列表以及他们所在位置的电话号码。 我的主要问题是我无法检索每个学生的电话号码作为集合。 例如,如果我有学生 1,学生 2。 位置 1 的学生 1 的电话 1111 和位置 1 的学生 2 的电话 2222 和电话 3333 和位置 2 的学生 2 的电话 444。 可以说我有 Student1 Alex group1 1111 Location1 Street1 Student3 Jack group1 93939 Location2 Street4 Student7 Joe group2 22223 Location4 Street8 Student2 John group1 2222 3333 Location1 Street1 Student2 John group1 4444 Location1 Street2 Student12 Mark group1 4423 Location9 Street9 带数据的样本输出 User asks for all students in group1 and location1 Student1 Alex Street1 phone 1111 distance30 Student2 John Street1 phones 22222,3333 distance30 Student2

2021-09-21 06:31:41    分类:技术分享    java   mysql   hibernate   orm   hibernate-criteria

在 Criteria 中使用 Select 和 where 语句(Using Select and where statement in Criteria)

问题 我正在我的 Web 应用程序中用 hibernate 替换 jdbc。 我了解到我不必在此编写任何 SQL 查询。 取而代之的是,标准查询可以帮助我。 这些是我的 SQL 查询,我想使用标准而非 HQL 将其转换为休眠状态。 String getOrgIdQuery = "SELECT * FROM USER_DETAILS WHERE USER_ID= ?"; rsDeptName = stmt.executeQuery("SELECT DEPARTMENT_NAME FROM DEPARTMENT WHERE DEPARTMENT_ID ="+ DeptID + ";"); String insertCreateCdcValuesFirst = ("UPDATE User_Details SET User_Name=?, Organization_ID=?, Department_ID=?, Access_Ctrl = ?, User_Role=? WHERE User_ID = ?;"); 回答1 首先,您必须使用POJOS映射您的表。 String getOrgIdQuery = "SELECT * FROM USER_DETAILS WHERE USER_ID= ?"; Hibernate前面代码如下所示。 Criteria criteria = session

2021-09-21 00:00:31    分类:技术分享    java   mysql   hibernate   hibernate-criteria

休眠一对多映射急切获取不起作用(Hibernate one-to-many mapping eager fetch not working)

问题 学院和学生实体之间存在一对多关系。 大学 @Entity public class College { private int collegeId; private String collegeName; private List<Student> students; @Id @GeneratedValue public int getCollegeId() { return collegeId; } public void setCollegeId(int collegeId) { this.collegeId = collegeId; } public String getCollegeName() { return collegeName; } public void setCollegeName(String collegeName) { this.collegeName = collegeName; } @OneToMany(targetEntity=Student.class, mappedBy="college", cascade=CascadeType.ALL, fetch=FetchType.EAGER ) public List<Student> getStudents() { return students; } public void

2021-09-20 22:13:13    分类:技术分享    java   hibernate   hibernate-mapping   hibernate-criteria

自定义 like 谓词来处理自定义用户定义的类型(Hibernate UserType)(Custom like predicate to handle custom user defined types (Hibernate UserType))

问题 我最近偶然发现了一个问题,我必须使用类似谓词构建 JPA 条件,该条件接受作为 UserType 实现的自定义类型。 我正在处理的自定义类型只不过是包含一些附加信息的String 。 我已经通过从 Hibernate 实现 Criterion 接口为 Hibernate 标准完成了它,并且它工作正常。 我现在必须对 JPA 做同样的事情,但是 Predicate 的 Hibernates 实现,在调用时创建的 LikePredicate: CriteriaBuilderImpl.like(Expression<String>,String) 看起来很复杂。 我需要的是这样的: ...like(Expression<MyUserType>, MyUserType) 有没有人做过这样的事情,可以给我一些提示吗? 谢谢! 回答1 这个问题是用一个辅助方法解决的,其中CustomString是自定义UserType : public static Predicate addLike(CriteriaBuilder cb, Path<CustomString> path, String val) { return cb.like(cb.lower(path.as(String.class)), val.toLowerCase()); }

2021-09-19 08:50:04    分类:技术分享    hibernate   jakarta-ee   jpa-2.0   hibernate-criteria

自定义 like 谓词来处理自定义用户定义的类型(Hibernate UserType)(Custom like predicate to handle custom user defined types (Hibernate UserType))

问题 我最近偶然发现了一个问题,我必须使用类似谓词构建 JPA 条件,该条件接受作为 UserType 实现的自定义类型。 我正在处理的自定义类型只不过是包含一些附加信息的String 。 我已经通过从 Hibernate 实现 Criterion 接口为 Hibernate 标准完成了它,并且它工作正常。 我现在必须对 JPA 做同样的事情,但是 Predicate 的 Hibernates 实现,在调用时创建的 LikePredicate: CriteriaBuilderImpl.like(Expression<String>,String) 看起来很复杂。 我需要的是这样的: ...like(Expression<MyUserType>, MyUserType) 有没有人做过这样的事情,可以给我一些提示吗? 谢谢! 回答1 这个问题是用一个辅助方法解决的,其中CustomString是自定义UserType : public static Predicate addLike(CriteriaBuilder cb, Path<CustomString> path, String val) { return cb.like(cb.lower(path.as(String.class)), val.toLowerCase()); }

2021-09-19 08:48:14    分类:技术分享    hibernate   jakarta-ee   jpa-2.0   hibernate-criteria

使用条件休眠更新单列(hibernate update single column using criteria)

问题 我有一个包含 mamy 列的表,我想更新该行的一列或几列而不影响剩余的列,我可以编写查询: update table as t set t.a=:a set t.b=:b where t.id=1 但是看到我不知道会选择更新哪些列,而且我认为每个场景都编写每个查询不是一个好主意。 好吧,我必须为每个场景编写查询,但我正在寻找一种更好的方法来动态更新表。 我认为标准将是一个不错的选择。 但问题是我不知道如何编写标准更新特定列。 我的代码现在可以更新该列,但它会将其他列设置为 null 或空。 在不更改其他列的情况下更新特定列的好方法是什么? 回答1 Hibernate 支持两种基本的方式来更新表的列。 第一个是自然的,通过将实体加载到session ,在运行时更改它,将更改刷新(更新)回数据库。 这是一个标准的ORM 风格。 第二个主要面向非常高效的 SQL UPDATE语句。 此处记录为: 15.4. DML 风格的操作 从文档中引用: ... 但是,Hibernate 提供了通过 Hibernate 查询语言执行的批量 SQL 样式 DML 语句执行的方法... 它不提供用于条件查询的 API,但它可以与 HQL == 一起使用我们的域模型。 我们可以在我们映射的实体之上创建一个 WHERE 子句,并只要求更新我们选择的几列。 有一些限制(不支持 JOIN

2021-09-14 14:01:17    分类:技术分享    hibernate   hibernate-criteria   dml

如何创建按日期字段+ Grails 月份分组的标准(how to create Criteria of Group By Month of Date Field + Grails)

问题 我想获得从今天到 365 天前按月分组的用户数。 我正在将 groovy 与 Hibernate Criteria builder API 一起使用。 有什么简单的方法可以进行这种分组? 我们如何指定按月对日期字段进行分组的日期格式? 现在我有以下几点: def con_cnt =Users.createCriteria().list { like('employeeid','c_%') between('sunsetdate', fromDate, toDate) projections { count('employeeid') //groupProperty('sunsetdate') } } groupProperty('sunsetdate') 以日期为基础对其进行分组,甚至包括分组中的时间 .. 因此计数是为一个非常独特的日期和时间计算的,这使得计数 1 与源表相同。 我们如何使用这种方法在分组中指定日期格式? 还是我必须使用 HQL? 提前致谢。 回答1 你可以访问这里了解更多详情 在域类中分别为周、月和年创建三个新的数字字段。 这些字段不会映射到表中的列。 为三个字段提供静态映射。 static mapping = { week formula('WEEK(DATE_OF_EXPENSE)') //provide the exact column name

2021-09-11 02:45:19    分类:技术分享    date   grails   groovy   group-by   hibernate-criteria

Hibernate Criteria to pull records from OneToMany Relations

I am passing a collection of vehicles names like ['car','jeep','truck','bike'] and want to select those owners who owns vehicles in this list using Criteria query, Owner here can own multiple vahicles (OneToMany). I have a limitation that i need to use Criteria query. class Owner { @ID @GeneratedValue(strategy = IDENTITY) @Column(name = "owner_id") private Long ownerId; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "owner_id") private Set<Vehicles> vehicles; } class Vehicles { @ID @GeneratedValue(strategy = IDENTITY) @Column(name = "vehicle_id") private Long vehicleId; @ManyToOne

2021-09-06 11:31:18    分类:问答    hibernate   hibernate-criteria