使用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检索嵌套数据?
非常感谢!
答案 0 :(得分:0)
尝试@ElementCollection(fetch = FetchType.EAGER)
因为默认类型是懒惰的。这意味着列表不会直接加载。