如何在JPQL中检索嵌套数据?

时间:2015-03-01 21:51:15

标签: jpa jpa-2.0 jpql

使用OpenJPA2持久性。我有一个非常简单的实体类,它有一个String属性和一个List属性。我确实使用嵌套List(在JSF2 Web项目中)完美地保存它的实例。我检查数据库,出现两个表(我使用自动模式生成),一个用于实体本身,另一个表用于嵌套List。使用EntityManager保留的所有数据都可以很好地存储在两个表中。

问题是我无法检索嵌套数据。我的意思是,我执行查询以获取实体的所有实例,但所有实例的列表都为空。

(DB Engine是MySQL.ORM是OpenJPA2。服务器是TomEE 1.6.IDE是Netbeans 8.我使用自动模式生成,所以我不想设计数据库表,我想让ORM创建表,所以我可以完全使用对象而忘记DB。)

以下是实体类代码:

@Entity
public class Cliente implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String nombre;

    @ElementCollection
    private List<String> emails = new ArrayList<String>();

   // getters and setters omitted for brevity.

它有一个关联的Facade类,它是ClienteFacade。它包含使用JPQL查询的getAll方法。

public List<Cliente> listaClientes(){
        Query query = em.createQuery("SELECT c FROM Cliente c");
        return query.getResultList(); }

问题是,我在List中获取了实体的所有实例,但所有List电子邮件列表都是空的。我认为问题可能出在JPQL查询中。仍然试图学习JPQL有一些困难...所以请问,我如何用JPQL检索嵌套数据?

非常感谢!

1 个答案:

答案 0 :(得分:0)

尝试@ElementCollection(fetch = FetchType.EAGER)因为默认类型是懒惰的。这意味着列表不会直接加载。