Tag: hql

Hibernate正在做多个select请求而不是一个(使用join fetch)

我有以下查询,我希望在单个选择请求中运行: @NamedQuery(name=Game.GET_GAME_BY_ID1, query = “SELECT g FROM Game g ” + “JOIN FETCH g.team1 t1 ” + “JOIN FETCH t1.players p1 ” + “JOIN FETCH p1.playerSkill skill1 ” + “where g.id=:id”) 问题是所有内容都是由单独的多个查询提取的。 我只希望在一个请求中获取团队和团队的玩家以及每个玩家的技能。 但相反,我有多个选择查询来获取每个球队,球员,每个球员的统计数据和技能。 以下是与注释一起使用的实体: 游戏实体: public class Game implements Serializable { private Integer id; private Integer dayNumber; private Long date; private Integer score1; private […]

Hibernate:如何从多个类的查询中获取结果

如果我的查询包含一个类,例如: query = session.createQuery(“select u from User as u”); queryResult = query.list(); 然后我迭代它,其中queryResult是User类的对象。 那么如何从包含多个类的查询中获取结果呢? 例如: select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1

可以在另一个查询的结果集上选择HQL吗?

可以在另一个查询的结果集上选择HQL吗? 例如: SELECT COUNT(*) FROM (SELECT * FROM Table) 我可以在SQL中做到这一点,但是当我在HQL中尝试上面但它只是向我显示语法错误“意外令牌:(靠近第1行,第22列……”

HQL或Criteria中的CASE语句

从这个问题派生出来,是否可以将HQL或Criteria用于以下SQL语句: SELECT e.type, count(e), count(d), count (case when gender = ‘male’ then 1 else NULL end) AS NumberOfMaleEmployees from Department d JOIN d.employees e WHERE e.dead = ‘maybe’ GROUP BY e.type 虽然谷歌提出了一些HQL支持CASE语句的命中,但Hibernate 3.6.6失败了 QuerySyntaxException:意外令牌:CASE 当我在EntityManager实例上创建上面的查询时。 为每个e.type创建另一个查询来手动确定男性的数量,例如对于每个e.type,这有多糟糕。 SELECT count(e), from Department d JOIN d.employees e WHERE e.dead = ‘maybe’, e.type = ugly 由于可能有很多类型,这可能很慢。 我想数据库为我做的工作。

避免n + 1渴望获取子集合元素关联

我有以下课程: @Entity @Table(name = “base”) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = “DISCRIMINATOR”, discriminatorType = DiscriminatorType.STRING) @ForceDiscriminator public class Base { // … } @Entity @DiscriminatorValue(“foo”) public class Foo extends Base { @OneToMany( mappedBy = “foo”, cascade=CascadeType.ALL ) private List bars = new ArrayList(); // … } @Entity public class Bar { @ManyToOne (optional = false) @JoinColumn(name […]

JAPRepository不支持DML操作

我在扩展JPaRepository的界面中编写了一个删除某些对象的查询,但是当我执行查询时它会抛出exception! 可以任何人为我解释,并提前谢谢你:) 查询: public interface LimitRepository extends JpaRepository { @Query(“delete from CLimit l where l.trader.id =:#{#trader.id}”) void deleteLimitsByTrader(@Param(“trader”) CTrader trader); } 我得到了这个错误,可以任意请,为我解释一下,谢谢大家:) 例外: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.query.domain.CLimit l where l.trader.id =:__$synthetic$__1] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:318) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:369) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) […]

如何在Hibernate注释应用程序中外部化命名查询?

有没有办法将HQL命名查询外部化到外部文件。 我有太多的命名查询,并且使用@NamedQueries和@NamedQuery在我的实体类的头部受到了伤害。 有没有办法外化到几个文件?

用于选择多个值的Hibernate查询

在hibernate中,我可以做到以下 Query q = session.createQuery(“from Employee as e); List emps = q.list(); 现在如果我想获取int和String我该怎么办? Query q = session.createQuery(“”SELECT E.firstName,E.ID FROM Employee E”; List ans = q.list(); 现在列表的结构是什么?

按月分组,在Hibernate中使用标准

我正在尝试使用Criteria和ProjectionList获取报告,而我通过hibernate使用它是非常新的。 所以我有这个模型: private Long _userId; private Category _category; private Long _companyId; private Double _amount; private Date _date; 我用这个构建查询: public List sumPaymentsByUserCategoryPeriod(Category category, Long userId,Integer period){ GregorianCalendar from = new GregorianCalendar(); from.add(Calendar.MONTH, -period); List resultDTO= new ArrayList(); Criteria criteria = getSession().createCriteria(Payment.class); criteria.add(Restrictions.eq(“_category”, category)); criteria.add(Restrictions.eq(“_userId”,userId)); criteria.add(Restrictions.between(“_date”, from.getTime(), new Date())); ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.sum(“_amount”)); projectionList.add(Projections.groupProperty(“_date”)); criteria.setProjection(projectionList); return […]

忽略关系中的FetchType.EAGER

我在大型应用程序中遇到EAGER关系问题。 此应用程序中的某些实体与其他实体具有EAGER关联。 这在一些function中变成了“毒药”。 现在我的团队需要优化这些function,但我们无法将获取类型更改为LAZY ,因为我们需要重构整个应用程序。 所以,我的问题是:有没有办法在我返回的实体中忽略EAGERs关联来执行特定查询? 示例:当我有这个实体Person时,我想在查询人员时不带地址列表。 @Entity public class Person { @Column private String name; @OneToMany(fetch=FetchType.EAGER) private List address; } Query query = EntityManager.createQuery(“FROM Person person”); //list of person without the address list! But how??? List resultList = query.getResultList(); 谢谢! 更新 我找到的唯一方法是不返回实体,只返回实体的某些字段。 但我想找到一个解决方案,我可以返回实体(在我的例子中, Person实体)。 我在想是否可以在Hibernate中将同一个表映射两次。 通过这种方式,我可以在没有EAGER关联的情况下映射同一个表。 在少数情况下这会帮助我……