有没有办法从 EntityManager 获取所有托管实体

发布于 2024-10-21 07:46:53 字数 644 浏览 8 评论 0原文

我正在设置一个基本的测试数据实用程序,并希望跟踪 EntityManager 处理的所有数据。有没有一种方法可以一次性获取 EntityManager 管理的所有内容,而不是仅仅为每个实体提供一堆列表?

所以不是这样:

EntityManager em;
List<Entity1> a;
List<Entity2> b;
...
List<Entityn> n;

cleanup() {
    for(Entity1 e : a) em.remove(e);
    for(Entity2 f : b) em.remove(f);
    ...
    for(Entityn z : n) em.remove(z);
}

我想要这样的东西;

EntityManager em;

cleanup() {
    List<Object> allEntities = em.getAllManagedEntities(); //<-this doesnt exist
    for(Object o : allEntities) em.remove(o);
}

不确定这是否可能,但我只是想象经理知道它在管理什么?或者,如果您有任何轻松管理一堆实体的想法。

I'm setting up a basic test data util and want to keep track of all the data that the EntityManager handles. Rather than just having a bunch of lists for each entity is there a way to grab everything being managed by the EntityManager in one fell swoop?

So instead of this:

EntityManager em;
List<Entity1> a;
List<Entity2> b;
...
List<Entityn> n;

cleanup() {
    for(Entity1 e : a) em.remove(e);
    for(Entity2 f : b) em.remove(f);
    ...
    for(Entityn z : n) em.remove(z);
}

I want something like this;

EntityManager em;

cleanup() {
    List<Object> allEntities = em.getAllManagedEntities(); //<-this doesnt exist
    for(Object o : allEntities) em.remove(o);
}

Not sure if this is possible, but I just would image that the manager knows what it is managing? Or, if you have any ideas of managing a bunch of entities easily.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

﹉夏雨初晴づ 2024-10-28 07:46:53

我认为这可能会有所帮助:

for (EntityType<?> entity : entityManager.getMetamodel().getEntities()) {
    final String className = entity.getName();
    log.debug("Trying select * from: " + className);
    Query q = entityManager.createQuery("from " + className + " c");
    q.getResultList().iterator();
    log.debug("ok: " + className);
}

基本上 EntityManager::MetaModel 包含有关所管理实体的元数据信息。

I think this might help:

for (EntityType<?> entity : entityManager.getMetamodel().getEntities()) {
    final String className = entity.getName();
    log.debug("Trying select * from: " + className);
    Query q = entityManager.createQuery("from " + className + " c");
    q.getResultList().iterator();
    log.debug("ok: " + className);
}

Basically EntityManager::MetaModel contains the MetaData information regarding the Entities managed.

下壹個目標 2024-10-28 07:46:53

您使用哪个 JPA 提供商?

JPA API 中没有任何相关内容。

如果使用 EclipseLink,您可以使用,

em.unwrap(UnitOfWorkImpl.class).getCloneMapping().keySet()

What JPA provider are you using?

There is nothing in the JPA API for this.

If using EclipseLink, you can use,

em.unwrap(UnitOfWorkImpl.class).getCloneMapping().keySet()
嘿看小鸭子会跑 2024-10-28 07:46:53

如果需要删除测试期间插入的所有实体,可以在事务内执行测试,然后回滚该事务。请参阅 9.3.5.4 事务管理
作为这种方法的一个例子。

If you need to remove all entities inserted during a test, you can execute the test inside a transaction and then rollback that transaction. See 9.3.5.4 Transaction management
as an example of this approach.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文