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

How to retrieve nested data in JPQL?

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

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

(数据库引擎是 MySQL。ORM 是 OpenJPA2。服务器是 TomEE 1.6。IDE 是 Netbeans 8。我使用自动模式生成,所以我不想设计数据库 tables,我确实想让 ORM 创建 tables,所以我可以纯粹使用对象而忘记 DB。)

以下是实体 Class 代码:

@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.

它确实有一个关联的外观 Class,即 ClienteFacade。它包括使用 JPQL 查询的 getAll 方法。

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

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

非常感谢!

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