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

这是否可能:结果中包含list属性的JPA / Hibernate查询?

颛孙麻雀
2023-03-14
问题内容

在hibernate状态下,我想运行此JPQL / HQL查询:

select new org.test.userDTO( u.id, u.name, u.securityRoles)
FROM User u
WHERE u.name = :name

userDTO类:

public class UserDTO {
   private Integer id;
   private String name;
   private List<SecurityRole> securityRoles;

   public UserDTO(Integer id, String name, List<SecurityRole> securityRoles) {
     this.id = id;
     this.name = name;
     this.securityRoles = securityRoles;
   }

   ...getters and setters...
}

用户实体:

@Entity
public class User {

  @id
  private Integer id;

  private String name;

  @ManyToMany
  @JoinTable(name = "user_has_role",
      joinColumns = { @JoinColumn(name = "user_id") },
      inverseJoinColumns = {@JoinColumn(name = "security_role_id") }
  )
  private List<SecurityRole> securityRoles;

  ...getters and setters...
}

但是当Hibernate 3.5(JPA 2)启动时,出现此错误:

org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate 
constructor on class [org.test.UserDTO] [SELECT NEW org.test.UserDTO (u.id,
u.name, u.securityRoles) FROM nl.test.User u WHERE u.name = :name ]

结果是否可能包含列表(u.securityRoles)的选择? 我应该只创建2个单独的查询吗?


问题答案:

没有NEW(选择标量值 集合值的路径表达式)的查询无效,因此我认为添加a NEW不会使事情起作用。

作为记录,这是JPA 2.0规范在 4.8 SELECT子句中 所说的:

SELECT子句具有以下语法:

select_clause ::= SELECT [DISTINCT] select_item {, select_item}*
select_item ::= select_expression [ [AS] result_variable]
select_expression ::=
         single_valued_path_expression |
         scalar_expression |
         aggregate_expression |
         identification_variable |
         OBJECT(identification_variable) |
         constructor_expression
constructor_expression ::=
         NEW constructor_name ( constructor_item {, constructor_item}* )
constructor_item ::=
         single_valued_path_expression |
         scalar_expression |
         aggregate_expression |
         identification_variable
aggregate_expression ::=
         { AVG | MAX | MIN | SUM } ([DISTINCT]

state_field_path_expression) |
COUNT ([DISTINCT] identification_variable |
state_field_path_expression |
single_valued_object_path_expression)





 类似资料:
  • 我的MongoDB集合中有一个深度嵌套的集合。 当我运行以下查询时: 我在这里得到了这个嵌套结果: 现在,这就是我想要的: 或者这个: 或者其他类似的东西…这可能吗?

  • 我试图使用一种方法来检查一个数组列表是否包含一个带有属性的对象。 这是我目前拥有的,但我无法让它发挥作用。

  • 问题内容: 在我们的应用程序中,我们需要具有只能分配一次的字段。 最初,我们想到封装字段并将设置程序设为私有。但是,引起一些问题: 如果没有公共设置者,Hibernate是否仍然可以从数据库映射字段? 我是否可以剥离设置器并使字段仅在实体构造函数中可变? 最后,是否有任何标准的JPA方法使字段不变? 提前致谢。 问题答案: 广告。1:我相信,如果将注释放在字段而不是在getter上,则JPA会将普

  • 问题内容: 我有两个Hibernate数据对象。第一个是用户(具有唯一的ID,用户名等),第二个是Collaborateable类。在这两者之间存在n对m的关系(带有Set的实现)。这意味着,一个用户使用许多可协作对象,而一个可协作对象具有许多用户。另外,一个可协作对象只有一个用户作为所有者。 我想实现一个Hibernate查询,该查询搜索具有特定用户作为所有者或在Collaborateable.

  • 我需要通过在Hibernate中执行本机查询获得结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体。 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个有值的结果。(Hibernate JPA) 结果是:爱丽丝 当我试图从相同的代码中获得多个select out(查询为select name)时,指定来自fresher_test(其中id=1) 这有一种方法,我可

  • 我正在检查是否存在一个对象属性,该属性带有一个包含所讨论的属性名的变量。 这是,因为它正在查找,但我希望它检查