Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何从持久性单元获取所有托管类型的列表_Hibernate_Jakarta Ee_Jpa - Fatal编程技术网

Hibernate 如何从持久性单元获取所有托管类型的列表

Hibernate 如何从持久性单元获取所有托管类型的列表,hibernate,jakarta-ee,jpa,Hibernate,Jakarta Ee,Jpa,输入:2个实体类: @Entity @Table(name = "Table1") public class Table1 implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") private Integer id; @Column(name = "Name") private String name

输入:2个实体类:

@Entity
@Table(name = "Table1")
public class Table1 implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Integer id;


    @Column(name = "Name")
    private String name;
}

@Entity
@Table(name = "Table2")
public class Table2 implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Integer id;


    @Column(name = "Name")
    private String name;
}
persistence.xml:

 <class>data.Table1</class>
 <class>data.Table2</class>
data.table 1
数据表1.2
我想从持久性单元获得所有管理类型的列表

输出:

puplic List<List<Object> GetAllObjects();

puplic List将
EntityManager
设置为
em
,将当前实体类(在迭代所有实体类集合时)设置为
entityClass
do:

// for each entity class {
    List<?> results = findAll(em, entityClass);
    doSomethingWithResults(results, entityClass);
// }
//对于每个实体类{
列表结果=findAll(em,entityClass);
doSomethingWithResults(结果,实体类);
// }
并添加以下实用程序方法:

private <T> List<T> findAll(EntityManager em, Class<T> entityClass) {
    CriteriaQuery<T> cq = makeAllCriteriaQuery(em, entityClass);
    TypedQuery<T> tq = em.createQuery(cq);
    List<T> ret = tq.getResultList();
    return ret;
}
private <T> CriteriaQuery<T> makeAllCriteriaQuery(EntityManager em, Class<T> entityClass) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<T> q = cb.createQuery(entityClass);
    Root<T> root = q.from(entityClass);
    q.select(root);
    return q;
}
私有列表findAll(EntityManager em,类entityClass){
CriteriaQuery cq=makeAllCriteriaQuery(em,entityClass);
TypedQuery tq=em.createQuery(cq);
List ret=tq.getResultList();
返回ret;
}
私有CriteriaQuery makeAllCriteriaQuery(EntityManager em,类entityClass){
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery q=cb.createQuery(entityClass);
Root=q.from(entityClass);
q、 选择(根);
返回q;
}

缺点是您的方法
doSomethingWithResults()
将接收对象列表-它不知道正确的类型。您始终可以通过添加一个接口来丰富此示例,例如,该接口将接收正确键入的列表,但这是原则。

请提供有关实体以及预期和实际结果的更多信息。现在还不清楚被问到了什么。我重构了我的问题,现在我明白了。既然您已经找到了答案,您可以将问题标记为重复,删除它,或者添加自己的答案并接受它。重构我的问题v2)