Не удается получить доступ к EntityManager с JPA 2.1 и Hibernate5

У меня есть приложение с Hibernate 5, и я добавил JPA 2.1 для выполнения массовых обновлений с помощью CriteriaBuilder.createCriteriaUpdate().

Но мне нужно назначить CriteriaBuilder из EntityManager.getCriteriaBuilder(), и я не могу получить 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?


person Marcelo Abiarraj    schedule 06.12.2016    source источник


Ответы (1)


Если вы используете Spring, было бы намного проще использовать стартовые модули Spring Boot. Для JPA это будет "spring-boot-starter-data-jpa", вы можете найти определение зависимости maven здесь.

Кроме того, не могли бы вы добавить больше информации о вашей конфигурации? Вы говорите, что не используете файл persistence.xml, так что же вы используете для установки своих источников данных?

person Bruno Delor    schedule 06.12.2016
comment
Вопрос обновлен. Я использую Spring, но не Spring Boot, может быть, я могу просто добавить упомянутый вами пакет? Я использую только аннотации для отображения данных. - person Marcelo Abiarraj; 07.12.2016
comment
Вы также определяете где-нибудь bean-компоненты sessionFactory? Как насчет объявления источника данных? Ваше приложение работало до использования JPA? - person Bruno Delor; 08.12.2016
comment
oops не собирался фиксировать это сообщение раньше, это не было сделано. - person Bruno Delor; 08.12.2016
comment
grmbl no edit ›‹ в любом случае, в моем приложении я использую java conf для установки источника данных, entityManager и диспетчера транзакций. Взгляните на baeldung.com/the-persistence-layer- with-spring-and-jpa, чтобы получить пример того, как это сделать. - person Bruno Delor; 08.12.2016