Tag: hql

Hibernate多态查询

我有两个类,Person和Company,来自另一个类Contact。 它们在两个表(Person和Company)中以多态forms表示。 简化的类看起来像这样: public abstract class Contact { Integer id; public abstract String getDisplayName(); } public class Person extends Contact { String firstName; String lastName; public String getDisplayName() { return firstName + ” ” + lastName; } } public class Company extends Contact { String name; public String getDisplayName() { return name; } } 问题是我需要查询查找包含某个字符串的displayName的所有联系人。 […]

控制Hibernate EnumType.STRING属性的排序顺序

目前,我的项目使用@Enumerated(EnumType.ORDINAL) ,所以当我按此列排序时,它是根据enum的顺序进行排序,这很好。 但我需要在enum添加一些额外的值,这些值需要插入枚举值列表中的不同位置,并且不能仅添加到底部以维持正确的排序顺序。 如果我这样做,我的数据库将搞砸。 我将不得不编写一些脚本来将所有这些序数值转换为正确的新序数。 以后可能需要添加更多状态。 因为我必须修复数据库中的所有数据,所以我只想做一次,因为这将是一项艰巨的任务。 所以我想切换到EnumType.STRING ,不必再次重新映射数据库中的序号值。 但是,如果我这样做,那我该怎么排序呢? 枚举字符串的字母顺序不是我需要的顺序。 使用下面的类,当我按属性“status”排序时,结果按以下顺序排列: hql = “from Project order by status” Development Planning Production 我希望他们按此顺序出现,而不使用EnumType.ORDINAL : Planning Development Production 如果没有为enum创建表,或者向Project类添加其他列,是否可以这样做? 我试过这个,但它引发了一个exception: hql = “from Project order by status.sort” 枚举: public enum Status { PLANNING(“Planning”, 0), DEVELOPMENT(“Development”, 1), PRODUCTION(“Production”, 2); private final String name; private final int sort; […]

Hibernate返回整数值

我是hibernate的新手。 我想传递2列值,并希望hibernate返回该表的主键。 String queryString = “select perId from Permission where document.docId=1 and user.id=2”; return getHibernateTemplate().find(queryString); 但是这个方法返回List。 我怎样才能返回int值。

使用HQL进行内部联接

我试图在一列内连接两个表。 从DB方面来说,没有映射,因为它是我不想讨论的东西。 我想使用INNER JOIN执行HQL查询并检索ROLE对象/结果。 到目前为止这是我的hql session.createQuery(“来自ROLE作为角色INNER JOIN INVOLVEMENT作为参与ON role.id = involvement.roleid WHERE involvement.id = X”)。list(); 我看到HQL上没有ON。 我如何明确告诉Hibernate只在这个列上加入。 我也在下面尝试过 从ROLE中选择roleSpec作为角色,将INVOLVEMENT作为参与选择WHERE role.ID = involvement.role_id和involvement.id = 27251352 但我在exception中没有映射到ROLE。

Hibernate 5.2版 – >很多Query方法都弃用了?

我是Hibernate的新手。 我正在尝试获取所有管理员的名字和姓氏列表。 我的以下代码中有两个警告。 我已经尝试在线搜索了很多。 1)查询是原始类型。 应该参数化对generics类型Query的引用。 2)不推荐使用Query类型的方法list()。 public List loadAllAdmins() { List allAdmins = new ArrayList(); try { HibernateUtil.beginTransaction(); Query q = currentSession.createQuery(“SELECT admin.firstName, admin.lastName from AdminBean admin”); allAdmins= q.list(); HibernateUtil.commitTransaction(); } catch (HibernateException ex) { System.out.println(“List loadAllPersons: HibernateException”); } return allAdmins; } 但我在整个网络上都看到了这样的示例代码。 我该如何解决这两个问题? 更新 我只是尝试按照建议使用Criteria。 它还说,对于Criteria,list()方法是弃用的……看起来很多方法都被弃用了Query和Criteria,包括uniqueResult()和其他…任何建议我应该如何替换它们?

Hibernate QueryTranslatorImpl HQL AST解析性能

我正面临使用@NamedEntityGraph执行标准spring-data-jpa findAll查询的性能问题 当我检查日志时,我看到以下语句: 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] CriteriaQueryImpl: Rendered criteria query -> select generatedAlias0 from Patient as generatedAlias0 order by generatedAlias0.id asc 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] CriteriaQueryImpl: Rendered criteria query -> select count(generatedAlias0) from Patient as generatedAlias0 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] SQL: select count(patient0_.id) as col_0_0_ from patient patient0_ 2016-10-26 09:46:25,682 DEBUG [http-nio-8080-exec-1] Loader: Result […]

HQL获取拥有集合中所有项目的元素

目前,我有一个HQL查询,它返回所有拥有任何奖项的会员: from Member m left join m.awards as a where a.name in (“Trophy”,”Ribbon”); 我现在需要的是HQL,它将返回拥有奖项中指定的所有奖项的所有会员。 所以,假设这个数据: Joe has Trophy, Medal Sue has Trophy, Ribbon Tom has Trophy, Ribbon, Medal 上面的查询将返回Joe,Sue和Tom,因为这三个人至少拥有Trophy或Ribbon中的一个。 但我只需要回归苏和汤姆,因为他们是唯一拥有所有指定奖项(奖杯和彩带)的人。 这是类结构(简化): class Member { private String name; private Set awards; } class Award { private String name; }

将hibernate投影映射到java POJO模型

过去几周我一直在使用spring和hibernate,我一直在那里学习新东西。 现在我有一个问题,我想用Hibernate中的Projections来解决。 假设有一个模型Person ,那个模型有很多Car 。 以下是类定义大致如下所示: public class Person implements java.io.Serializable { private Integer id; private String name; private List cars; private Integer minYear; // Transient private Integer maxYear; // Transient } public class Car implements java.io.Serializable { private Integer id; private Integer year; } 这里的问题是我想让每个Person的minYear ( maxYear )在他们拥有的cars的最早年份(最近一年)填满。 后来我找到了使用Projections的解决方案,但我偶然发现了org.hibernate.QueryException: could not resolve property: minYear […]

使用HQL进行Hibernate分页

Hibernate分页问题 我有一个与Hibernate分页有关的问题,在某种程度上已经解释了这个问题 Mysql分页优化 使用Hibernate的ScrollableResults慢慢读取9000万条记录 Hibernate – HQL分页 分页和排序的问题 Hibernate Row Pagination 细节 来自应用程序的HQL查询: Query q = session.createQuery(“from RequestDao r order by r.id desc”); q.setFirstResult(0); q.setMaxResults(50); 查询返回300万条记录,对于分页,我们只设置了50条记录,分页页面非常慢,因为在每次刷新时我们都会调用查询来获取300万条记录,而我们只设置50条记录。 我的主要问题是 HQL是否总是进入并命中数据库,或者它是否会进入会话或内存以查找数据,如果它每次都进入数据库并获得结果集那么从性能的角度来看它是非常合适的,什么是最好的解决方案来改进它? 在hibernate中使用HQL有一种方法可以查询数据库,首先只获取50条记录,然后根据用户的要求获取其他记录。 这个挑战真的让应用程序陷入困境,那么解决这个问题的最佳方法是什么呢? 在日志中生成的HQL查询 from com.delta.dao.RequestDao r order by r.id desc Hibernate生成的查询 select getrequest0_.ID as ID24_, getrequest0_.TIME as START3_24_, getrequest0_.STAT as STATUS24_, getrequest0_.SUM as SUMMARY24_, getrequest0_.OUTNAME as OUTPUT7_24_, […]

JPA – 批量/批量更新 – 更好的方法是什么?

我发现JPA不支持以下更新: Update Person p set p.name = :name_1 where p.id = :id_1, p.name = :name_2 where p.id = :id_2, p.name = :name_3 where p.id = :id_3 …. // It could go on, depending on the size of the input. Could be in 100s 所以我有两个选择: 选项1: Query q = em.createQuery(“Update Person p set p.name = :name […]