Не удается получить доступ к 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)


arrow_upward
0
arrow_downward

Если вы используете 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