【问题标题】:JTA & MySQL - How to Retrieve records from databaseJTA & MySQL - 如何从数据库中检索记录
【发布时间】:2013-03-05 12:42:10
【问题描述】:

我是 JTA 的新手,我需要一种从数据库中检索一些元素的方法。我可以通过 EntityManager 做到这一点,但这仅适用于 ResourceLocal。 我想知道我该怎么做:

Query q = em.createNamedQuery("AnyQuery");
q.getResultList();

不使用EntityManager。 有什么想法吗?

【问题讨论】:

    标签: java ejb persistence entitymanager jta


    【解决方案1】:

    问题本身表明您不了解您尝试使用的任何技术。在进行任何实际开发之前,您可能需要学习一些更通用的东西。

    • 您可能混淆了 JTA 和 JPA,
    • 您关于 RESOURCE_LOCAL 的陈述不正确(并且不相关) - 存在 JTA 和 RESOURCE_LOCAL 事务,而在 Java EE 中您通常使用前者,
    • 您对在没有 EntityManager 的情况下使用命名 JPA 查询的想法显然是荒谬的,并且可能源于某种误解(在没有实体管理器的情况下使用命名查询有什么意义?),
    • 说“来自数据库的一些元素”表明您无法真正区分记录和映射对象之间的区别,在这种情况下,您可能根本不应该使用 JPA。

    我并不希望你接受这个答案。这只是我的挫败感。

    编辑

    好的,既然你提到了 JSF,我就更了解你的问题了。

    我假设您想使用 JPA。在这种情况下,您可以选择:

    • 创建您自己的 EntityManager(在这种情况下,您不能将其注入;相反,您必须使用 EntityManagerFactory 并构建您自己的)。这是一个“应用程序管理的 EntityManager”。你真的不想这样做。
    • 使用注入的 EntityManaged(“容器管理的 EntityManager”)。这是标准选择。

    现在你需要一笔交易。由于您应该使用 JTA EntityManager,因此您需要一个负责协调整个事情的事务对象。同样,您有两个选择:

    • 在 JSF bean 中,注入一个 UserTransaction(使用 @Resource 注释)。这很混乱,容易出错并且需要大量的样板,但你会找到所有必要的方法。您可以创建自己的(应用程序管理的)EntityManager,调用其 joinTransaction 方法,然后在 UserTransaction 上调用 begin-commit。这将是一个“应用程序管理事务”
    • 将 EntityManager 代码移至 EJB。它只需要几行代码和一个注释(@Statless)。 EJB 中的所有代码 - 神奇地 - 包装在容器为您管理的事务中。这是“容器管理事务”——默认和常见的选择。

    上面的每一件事都可以(也应该)用一些额外的信息来扩展。但你的捷径是:

    • 创建一个 EJB(一个带有 @Stateless 注解的简单类),
    • 将使用EntityManager的方法移到EJB,
    • 将 EJB 注入您的托管 bean(使用 @EJB 注释)并调用相关方法。

    JTA 事务将在每次调用任何 EJB 方法时发生。这应该让你开始:-)

    【讨论】:

    • 不,实际上我很欣赏你的回答,你说得对,我在这里混淆了一些事情。但是我非常了解我必须使用 EntityManager 并且我知道 JPA 是什么,但是在我的 JSF Web 应用程序中它不断告诉我我不能在使用 JTA 时使用“EntityTransaction”。我试图将其设为“ResourceLocal”,但由于某些原因,它显示错误,说应用程序应该是 JTA。我有很多问题,但我简化了一切,只询问如何在没有“em.getTransaction.begin”等的情况下从数据库中获取一些行。无论如何,谢谢
    • 对我来说听起来很奇怪。为什么需要手动开始交易? JTA 未配置(正确)? EntityManager 在 JEE SessionBean 之外使用?
    • @AlbanoVito:提到 JSF 帮助我理解了你的问题。帖子已更新。
    • 非常感谢先生,这正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多