如何使用spring JPA查询列表元素

时间:2013-11-26 19:10:35

标签: java hibernate jpa persistence

上下文 沙拉含有多种蔬菜。让我们假设沙拉的配方是按照给定的顺序添加蔬菜,因此订单也需要保留

以下是类定义

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. 我正在使用List,因为蔬菜的序列必须保存
  2. 在保存沙拉时,蔬菜表中已经存在成分蔬菜
  3. 目的: 创建一个JPQ查询以获取给定沙拉所涉及的所有蔬菜的列表

    我尝试了什么? 1)

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

    哪个不起作用。如何查询没有类的表(如List和Map?变量)

2 个答案:

答案 0 :(得分:2)

试试这个:

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

请记住:在JPQL中,您使用的是Java字段,而不是列名。此外,Vegetable实体与Salad实体之间没有关系。

答案 1 :(得分:0)

你甚至可以说

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