如何在 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)
,因为默认类型是懒惰的。这意味着列表不是直接加载的。
使用 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)
,因为默认类型是懒惰的。这意味着列表不是直接加载的。