休眠条件投影别名未使用 - java

Hibernate Projection别名甚至可以工作吗?我可以发誓就是没有。至少,它并没有达到我的预期。

这是java:

return sessionFactory.getCurrentSession()
    .createCriteria(PersonProgramActivity.class)
    .setProjection(Projections.projectionList()
        .add(Projections.alias(Projections.sum("numberOfPoints"), "number_of_points"))
        .add(Projections.groupProperty("person.id")))
    .setFirstResult(start)
    .setFetchSize(size)
    .addOrder(Order.desc("numberOfPoints"))
    .list();

这是它生成的SQL:

select
    sum(this_.number_of_points) as y0_,
    this_.person_id as y1_
from
    PERSON_PROGRAM_ACTIVITY this_
group by
    this_.person_id
order by
    this_.number_of_points desc

它似乎根本不使用别名。我认为设置别名将意味着sum(this_.number_of_points)将被别名为number_of_points而不是y0_。我缺少一些技巧吗?

谢谢。

参考方案

您需要为整个条件指定一个别名,然后您可以创建其他实际使用的别名。奇怪的是,别名被转换为y0_而不是其他方式。

return sessionFactory.getCurrentSession()
    .createCriteria(PersonProgramActivity.class, "ppa")
    .setProjection(Projections.projectionList()
        .add(Projections.alias(Projections.sum("numberOfPoints"), "ppa.numberOfPoints"))
        .add(Projections.groupProperty("person.id")))
    .setFirstResult(start)
    .setFetchSize(size)
    .addOrder(Order.desc("ppa.numberOfPoints"))
    .list();

生成以下SQL:

select
    sum(this_.number_of_points) as y0_,
    this_.person_id as y1_
from
    PERSON_PROGRAM_ACTIVITY this_
group by
    this_.person_id
order by
    this_.y0_ desc

Hibernate:现实世界中的模式导出? - java

我很好奇我的下一个项目完全使用架构导出。我认为这是真正处理对象而非基础数据库的非常有用的方法。只需创建并注释模型,然后将其导出即可。但是从先创建表然后创建模型对象的习惯来看,我对完全使用模式导出有疑问。这主要是因为我真的很深入休眠。但是我仍然好奇使用模式导出时,该区域列表是否会成为问题。请分享您的经验..表之间的关系代理/复合主键支持当我只想从多个模型中导出…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Scanner读取文件的奇怪行为 - java

因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …