无法使用JPA 2.1和Hibernate5访问EntityManager

时间:2016-12-06 18:47:26

标签: java spring hibernate jpa hibernate-entitymanager

我有一个Hibernate 5的应用程序,并添加了JPA 2.1以使用CriteriaBuilder.createCriteriaUpdate()执行批量更新。

但是我需要从EntityManager.getCriteriaBuilder()中分配CriteriaBuilder,而我无法获取EntityManager。

我没有persistence.xml文件,我认为Hibernate会为我提供一个EntityManager。

我在DAO课程中尝试了以下注释:

@Autowired
EntityManager entityManager

@PersistenceContext
EntityManager entityManager;

两者都无法注入依赖项。 我还试图实现一个EntityManagerFactory,但它失败了,因为我没有persistence.xml文件。所有实体都注释如下:

@Entity
@Table(name = "My_Entity")
public class MyEntity extends BaseEntity {

private static final long serialVersionUID = -8442071276091708080L;

 @Column(name = "VALUE", nullable = false)
 private BigDecimal value;

...
}

这是我的pom.xml的一部分:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.1.3.Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.1.3.Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>

的applicationContext.xml

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="transactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
    <property name="nestedTransactionAllowed" value="true"/>
</bean>

Hibernate实例是SessionFactory,有没有办法从中获取EM?

1 个答案:

答案 0 :(得分:0)

如果使用弹簧,使用弹簧启动启动器模块会更容易。对于JPA,它可以是“spring-boot-starter-data-jpa”,你可以找到maven依赖here的定义。

此外,您是否可以添加有关配置的更多信息?您说您不使用persistence.xml,那么您使用什么来设置数据源?