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

Hibernate AliasToBean与集合

马弘益
2023-03-14
问题内容

我在父类和子类之间定义了双向的一对多关系。我正在寻找执行一个查询,以便我可以在bean中返回一个父对象及其子对象的子集。

public class Parent {
    private int id;
    private Set<Child> children = new HashSet<Child>(0);

    // other fields + getters and setters
}

public class Child {
    private Parent parent;
    private int age;

    // other fields + getters and setters
}

我想要实现的输出是:

public class ParentChildWrapper {
    private Parent parent;
    private Collection<Child> children; // subset of children
}

我想过滤父母的ID和孩子的年龄列。我尝试了多种查询组合以获取所需的输出。

以下内容很接近,但没有将子级分组到我定义的ParentChildWrapper
bean中的集合中。我得到的结果是对象列表,每个孩子有1个实例与年龄过滤器匹配:

Query q = session.createQuery(
    "SELECT p, c " +
    "FROM Parent p " +
    "INNER JOIN p.children c " +
    "WHERE p.id = :id " +
    "AND c.age = :age"
);

我还尝试按父级分组,以尝试将所有子级聚合到一个集合中,但也无济于事。

显然,我可以将其分为两个单独的查询,以便选择父级,然后选择所需的子级。但是感觉这应该是一个相当普遍的用例。也许我不是在以hibernate式的方式思考。


问题答案:

只是不要使用任何转换器,而是自己编写循环代码:

List<Object[]> rows = query.list();
Parent parent = null;
List<Child> children = new ArrayList<Child>(rows.size());
for (Object[] row : rows) {
    parent = (Parent) row[0];
    children.add((Child) row[1]);
}
ParentChildWrapper result = new ParentChildWrapper(parent, children);

这使得8行琐碎代码代替了1行,但是避免了反射调用,因此可以安全地进行重构。



 类似资料:
  • Map和Set都叫做集合,但是他们也有所不同。Set常被用来检查对象中是否存在某个键名,Map集合常被用来获取已存的信息。 Set Set是有序列表,含有相互独立的非重复值。 创建Set 既然我们现在不知道Set长什么样,有什么价值,那么何不创建一个Set集合看看呢? 创建一个Set集合,你可以这样做: let set = new Set(); console.log(set);

  • 我正在尝试为firestore中的社交媒体应用程序组织数据。为帖子创建一个新集合或将其放入用户的子集合更好吗? 深度应该是一样的,但是一种方式比另一种方式有什么优势吗? 创建新集合: 职位(集合) 用户(集合) 用户中的子集合: 用户(集合)

  • 问题内容: 我对SQL(Server2008)的较低层次的了解是有限的,现在我们的DBA对此提出了挑战。让我解释一下这种情况:(我已经提到一些明显的陈述,希望我是对的,但是如果您发现有问题,请告诉我)。 我们有一张桌子,上面放着人们的“法院命令”。创建表(名称:CourtOrder)时,我的创建方式如下: 然后,我将非聚集索引应用于主键(以提高效率)。我的理由是,这是一个唯一字段(主键),应该像我

  • 问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,

  • 在连续情景中,我们不得不处理函数的集合和函数的系集。由函数集的名字可以看出,它就是一组函数,通常是一个变量——时间的函数。为描述函数集,我们可以给出集合中各种函数的显式表达式,也可以给出只有集合中的函数才拥有的性质。下面是一些示例: 由以下函数组成的集合: 。 的每个具体值确定了集合中的一个特定函数。 一个由时间函数组成的集合,其中包含频率不超过W周期/秒的所有时间函数。 一个由带宽局限于W、幅度

  • 我是新点燃的。 步骤1:我在两个VM(ubuntu)中安装了Ignite 2.6.0,在一个VM中启动了节点。下面有COMAND。bin/ignite.sh examples/config/example-ignite.xml 步骤2:我的所有配置都在example-default.xml中 步骤3:在其他VM中执行包含datagrid逻辑的client.jar(该VM既是客户机也是节点)。 步骤