当前位置: 首页 > 面试题库 >

如何使用休眠条件实现使用内部联接对象的选择查询

欧阳昊阳
2023-03-14
问题内容

我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询:

select A.mobilephone
    B.userNick
    C.creditCard
from mobile_table A
inner join user_table B
    on A.codmobile=B.codmobile
inner join Credit C 
    on A.mobileCredit= C.mobileCredit

如何使用休眠条件对象实现它?


问题答案:

您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria
API中的以下方法来构造所需的Criteria对象:

  • 使用setProjection(Projection projection)定义select子句
  • 使用createCriteria(String associationPath,String alias)定义内部联接

例如,如果SQL是:

select
    TableA.columnA ,TableB.columnB ,TableC.columnC
from TableA 
inner join TableB on TableA.tableB_id=TableB.id
inner join TableC on TableA.tableC_id=TableC.id
where TableA.columnAA="AAA"
and TableB.columnBB="BBB"
and TableC.columnCC="CCC"

然后,条件对象将是:

List<Object[]>resultList= (List<Object[]>)session.createCriteria(TableA.class, "aliasOfTableA") 
                .add(Restrictions.eq("aliasOfTableA.columnAA", "AAA"))  
                .createCriteria("aliasOfTableA.tableBId" , "aliasOfTableB")
                .add(Restrictions.eq("aliasOfTableB.columnBB", "BBB"))
                .createCriteria("aliasOfTableA.tableCId" , "aliasOfTableC")
                .add(Restrictions.eq("aliasOfTableC.columnCC", "CCC"))
                .setProjection( Projections.projectionList()
                        .add( Projections.property("aliasOfTableA.columnA") )
                        .add( Projections.property("aliasOfTableB.columnB"))
                        .add( Projections.property("aliasOfTableC.columnC") )
                ).list();

for (Object[] obj : resultList) {
        System.out.println(obj[0]); //print the value from TableA.columnA
        System.out.println(obj[1]); //print the value from TableB.columnB
        System.out.println(obj[2]); //print the value from TableC.columnC
}

请注意,所有参数Criteria使用映射的Java实体中的属性名称和类名称。



 类似资料:
  • 问题内容: 我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询: 如何使用hibernate条件对象实现它? 问题答案: 您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria API中的以下方法来构造所需的Criteria对象: 使用setProjection(Projection projection)定义select子句 使用creat

  • 问题内容: 我试图找出是否可以使用Hibernate Criteria API进行以下HQL: 其中InitialCount是一个非常简单的,具有字符串和长构造函数的bean: 可能吗? 问题答案: 试试这个 : 其中,公式属性是映射到公式“ substring(name,1,1)”的人员的属性

  • 问题内容: 我有三个实体,例如注册,用户和国家。基本上,注册属于用户,而用户属于国家。现在,我正在尝试通过以下方式从注册中选择国家/地区名称 这失败了,给我: 生成的hibernate查询: 我注意到在sql中没有联接。这就是为什么查询失败?我怎样才能解决这个问题 ? 问题答案: 尝试像

  • 问题内容: 在我的模型中,我有一个抽象的“ User”类,以及多个子类,例如Applicant,HiringManager和Interviewer。它们在一个表中,我只有一个DAO来管理它们。 用户: HiringManager(例如): 现在,如果我想得到所有与部门无关的招聘经理,我该怎么做?我想它看起来像: 但是,当我运行此代码时,Hibernate抱怨“无法解析属性:角色”(这实际上是有道理

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 连接只能在实体之间存在关联时使用。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为Jo

  • 问题内容: 我有一堂课; 我还有一节课; 我将如何搜索Student ,名字John,lastName Doe? 如果是出生日期属性,我将在日期上创建一个并添加一个相等限制()。我将如何对AppUser对象中的lastName和firstName进行操作? 问题答案: 查询: 要使用条件,请检查此线程 还可以从hibernate文档中查看此页面