【问题标题】:How to query list elements using spring JPA如何使用 Spring JPA 查询列表元素
【发布时间】:2013-11-26 19:10:34
【问题描述】:

背景: 沙拉包含多种蔬菜。让我们假设沙拉的食谱是按照给定的顺序添加蔬菜,所以这个顺序也需要保持

这是类定义

public class Salad {
  private String name;
  private String description;
  private List<Vegetable> veggies = new ArrayList<Vegetable>();
  //setters and getters
}

public class Vegetable {
 private String name;
 private String description;
 //setters and getters
}

这里是hibernate-mapping.xml

<hibernate-mapping>
    <class name="Salad" table="SALAD">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
        <property name="description"/>
        <list name=veggies cascade="all-delete-orphan" table="SALAD_VEGGIES" lazy="false">
          <key column="salad_id" />
          <list-index column="idx" />
          <many-to-many column="veg_id" class="Vegetable" />
        </list>
    </class>
    <class name="Vegetable" table="VEGETABLE">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
        <property name="description"/>
    </class>
</hibernate-mapping>
  1. 我正在使用列表,因为必须保留蔬菜的顺序
  2. 保存沙拉时,蔬菜表中已存在成分蔬菜

目标: 创建一个 JPQ 查询以获取给定沙拉所涉及的所有蔬菜的列表

我尝试了什么? 1)

SELECT v FROM SALAD.veggies v where v.salad_id = :salad_id

这没有用。如何查询没有类的表(如 List 和 Map? 变量)

【问题讨论】:

  • 如果我的回答有帮助,请将其标记为已接受。

标签: java hibernate jpa persistence


【解决方案1】:

试试这个:

SELECT v FROM Salad s JOIN s.veggies v where s.id = :salad_id

记住:在 JPQL 中,您使用的是 Java 字段,而不是列名。从Vegetable 实体到Salad 实体也没有关系。

【讨论】:

    【解决方案2】:

    你甚至可以说

    select v from Vegetable v where v.salad_id = :saladId
    

    【讨论】:

    • 蔬菜没有沙拉映射
    • 谁是关系的父母?看起来像一对多的关系(沙拉 - 蔬菜)那么蔬菜怎么没有沙拉的 ID,看起来很腥
    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 2017-10-10
    • 2018-07-11
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多