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

JPA:加入JPQL

慕宜民
2023-03-14
问题内容

我以为我知道该如何使用JOINJPQL但显然不知道如何使用。谁能帮我?

select b.fname, b.lname from Users b JOIN Groups c where c.groupName = :groupName

这给我例外

org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query
Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException

Users与拥有OneToMany关系Groups

Users.java

@Entity
public class Users implements Serializable{

    @OneToMany(mappedBy="user", cascade=CascadeType.ALL)
    List<Groups> groups = null;
}

Groups.java

@Entity
public class Groups implements Serializable {
    @ManyToOne
    @JoinColumn(name="USERID")
    private Users user;
}

我的第二个问题是,说此查询返回唯一的结果,那么如果我这样做

String temp = (String) em.createNamedQuery("***")
    .setParameter("groupName", groupName)
    .getSingleResult();

***代表上面的查询名称。那么fname,将其lname串联在一起temp还是会得到List<String>回报?


问题答案:

JPQL中的一对多关系如下所示:

select b.fname, b.lname from Users b JOIN b.groups c where c.groupName = :groupName

select子句中指定多个属性时,结果返回为Object[]

Object[] temp = (Object[]) em.createNamedQuery("...")
    .setParameter("groupName", groupName)
    .getSingleResult(); 
String fname = (String) temp[0];
String lname = (String) temp[1];

顺便说一下,为什么您的实体以复数形式命名,这令人困惑。如果要使用复数形式的表名,则可以使用@Table显式指定实体的表名,这样就不会干扰保留字:

@Entity @Table(name = "Users")     
public class User implements Serializable { ... }


 类似资料:
  • 问题内容: 我正在尝试使用join语句中的常量值从同一表中加入不同实体。在SQL中,我会做这样的事情… 在Java + JPA / Hibernate中,我正在尝试执行以下操作… 提前致谢! 问题答案: 您正在查看非标准联接。这是处理这种情况的文档: http://docs.oracle.com/cd/E13189_01/kodo/docs40/full/html/ref_guide_mappin

  • 我有一个项目,其中一部分数据结构是用@ Inheritance(strategy = Inheritance type)制作的。已加入)。数据结构的这一部分看起来像这样: 该设计基于本文的思想。我使用Hibernate和JPA2接口作为我的数据层。上面的结构产生了下面的pojo/dao类(省略了getter和setter): 基本项: 物理项目: 一些硬件: 其他硬件: 这是我的问题: 我的另一个

  • 我正在使用Spring Boot,JPA和Hibernate。我有以下实体,它与有关: 当我读取一个用户时,Hibernate会为每个附加角色生成一个选择,而不是使用加入。在纯Hibernate中,我将通过添加来解决这个问题 但这似乎没有任何影响。 是否可以为有关此实体的所有查询设置首选提取模式? 我找到的一种解决方法,我真的认为这是一种解决方法,因为我需要为每个查询指定它,是这样的:

  • 问题内容: 给定下面的JPA实体,我想获取 具有至少一个成功状态的“请求”的所有借方。 可能有许多请求具有相同的debit_id和不同的状态 我应该使用这样的东西还是有更好的做事方法 entityManager.createQuery(“从借方d连接d.id中选择c,其中request.status =成功” 而其他实体是 如果缺少任何内容,请发表评论,而不是关闭或拒绝该问题! 问题答案: 基本上

  • 当通过邮递员插入员工记录时,我得到了以下异常。 我有以下表格:1。emp_登机_详情- 异常:“org.hibernate.TransientPropertyValueException:对象引用了未保存的临时实例-在刷新之前保存临时实例:com.boarding.preboardingentities.Empboardingdetails.SubcontainDetails- 这是我的课程: 由

  • 问题内容: 我有这样的SQL语句: 因此,它为personID提供了“区别”行: 如果我有这样的表: 它会回来 现在,我尝试通过JPA CriteriaBuilder进行此操作。 我的第一个想法是子查询: 但这会产生错误 怎么对这个? 马可 问题答案: 我认为解决方案比看起来简单。您忘记了包含在CriteriaBuilder子查询中。以下代码执行您要查找的查询。 此代码将创建以下查询: 我认为您正