输入: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>
我想从持久性单元中获取所有manged类型的列表。
输出:
puplic List<List<Object> GetAllObjects();
我发现here我可以使用metamodel
首先,metamodel.getEntities()返回所有具有@Entity注释的实体类。它对persistence.xml一无所知。
我收到Set后如何从DB foreach EntityType获取所有对象?
答案 0 :(得分:1)
将EntityManager
作为em
和当前实体类(在迭代所有实体类的集合时)entityClass
执行:
// for each entity class {
List<?> results = findAll(em, entityClass);
doSomethingWithResults(results, entityClass);
// }
并添加以下实用程序方法:
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;
}
缺点是您的方法doSomethingWithResults()
将收到一个对象列表 - 它不知道正确的类型。您可以通过添加以下内容来丰富此示例:将接收正确类型列表的接口,但这是原则。