代码之家  ›  专栏  ›  技术社区  ›  Robert Strauch

使用@PersistenceContext插入EntityManager

  •  0
  • Robert Strauch  · 技术社区  · 7 年前

    我们目前正在使用 EntityManager 就像下面一样。我们想从 @PersistenceUnit @PersistenceContext 对于实体管理器。我们怎么用这个呢 @Inject 机制?

    持久性.xml:

    <persistence-unit name="my-data-source" transaction-type="JTA">
        <jta-data-source>java:/foo/model</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.show_sql" value="${hibernate.show_sql:false}"/>
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.use_sql_comments" value="true" />
            <property name="hibernate.order_inserts" value="true" />
            <property name="hibernate.order_updates" value="true" />
            <property name="hibernate.jdbc.batch_versioned_data" value="true" />
            <property name="hibernate.jdbc.batch_size" value="30" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57InnoDBDialect" />
        </properties>
    </persistence-unit>
    

    这就是我们获得实体经理的方法:

    @Stateless
    public class EntityManagerProvider {
    
        @PersistenceUnit(unitName = "my-data-source")
        private EntityManagerFactory emFactory;
    
        @Produces
        @Default
        public EntityManager getDefaultEntityManager() {
            return emFactory.createEntityManager();
        }
    
    }
    

    在应用程序中,我们像这样注入实体管理器:

    @Inject
    private EntityManager entityManager;
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   Ismail    7 年前

    我想你可以这样称呼它,当然不必打电话给EntityManagerFactory:

    @PersistenceContext
    EntityManager em;
    

    在这种情况下,容器将处理实体管理器bean的生命周期,因此您不需要调用EntityManagerFactory。

        2
  •  1
  •   Md. Sajedul Karim    7 年前

    您的代码如下:

    @PersistenceContext
    private EntityManager entityManager;
    

    进口货物如下:

    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    

    有关详细信息,请查看 this answer