【问题标题】:How to persist entities, how to create table from entities without "main class"?如何持久化实体,如何从没有“主类”的实体创建表?
【发布时间】:2013-03-02 12:47:15
【问题描述】:

我正在开发一个应用程序,并开始创建我的 JPA 实体(annotation + persistence.xml)。然后在我的 persistence.xml 文件中,我为 MySql 数据库创建了一个连接(连接很好)。

问题是我只是不知道如何在不创建“主类”的情况下保留我的实体。

我是否必须为要创建的每个实体运行我的主类?

【问题讨论】:

  • “没有主课”是什么意思?什么应该触发实体的创建?
  • 当然有一个 java EE 容器。我的意思是我必须有一个主类来做持久化的事情?
  • EntityManager#persist 说了什么?
  • @Nadia:您正在构建一个 JEE 应用程序。这个应用程序可能有一个 UI,作为 Web 应用程序实现。当最终用户将使用 Web 应用程序、单击链接和提交表单时,将创建实体,这将调用服务方法 (EJB),而服务方法 (EJB) 又将使用 JPA API 来持久化实体。您的问题听起来确实像您不知道自己在做什么。请澄清。

标签: java jakarta-ee jpa persistence jpa-2.0


【解决方案1】:

要持久化一个实体,您需要一个 entityManager 实例。由于您有一个 Java EE 容器,您可以使用 some bean

中的注解 @PersistenceContext 获取 entityManager 的实例

我所说的 some bean 是什么意思?它是一个由 Java EE 容器管理的 bean。因此,例如,您必须像这样定义一个 bean:

@Stateless
public class MyController{
    @PersistenceContext
    private EntityManager em;

    public void persistIt(Object anEntity){
        em.persist(anEntity);
    }
}

注解@Stateless 向容器表明它必须管理这个类并在需要时负责提供 entityManager 的实例。

所以要准确回答您的问题:只要您找到访问 entityManager 实例的方法,就不必让另一个类来持久化实体。

但是

  • 这绝对不是最佳做法。
  • 要利用 entityManager 注入:您必须使用另一个托管 bean,以便容器可以注入 entityManager。

此外,控制器是您可以正确处理交易的地方。

【讨论】:

    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2011-11-20
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2014-07-05
    相关资源
    最近更新 更多