Hibernate 如何从持久性单元获取所有托管类型的列表
输入:2个实体类: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
@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)