2015-12-15 2 views
0

Я читал сообщения, подобные этому, но я не могу понять, в чем проблема, в моем случае, поэтому любая помощь будет принята с благодарностью.Hibernte EntityManager не сохраняется

У меня есть объект объекта Xyz.

Это мой DAO класс:

@Repository 
public class XyzDAO { 
    @PersistenceContext(name = "MyEntityManager") 
    private EntityManager em; 

    @Transactional 
    public void create(Xyz xyz) { 
     em.persist(xyz); 
    } 

    public void setEntityManager(final EntityManager em) { 
     this.em = em; 
    } 
} 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="MyEntityManager" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>.....Xyz</class> 
     <properties> 
      <property name="hibernate.dialect" value="${hibernate.dialect}" /> 
      <property name="hibernate.connection.driver_class" value="${hibernate.connection.driver_class}" /> 
      <property name="hibernate.connection.url" value="${hibernate.connection.url}" /> 
      <property name="hibernate.connection.username" value="${hibernate.connection.username}" /> 
      <property name="hibernate.connection.password" value="${hibernate.connection.password}" /> 
      <property name="hibernate.show_sql" value="true" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

хуг-config.xml:

<beans .....> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean id="XyzDAO" class=".....XyzDAO"></bean> 
</beans> 

Чтение Xyz из БД работает отлично, но если я пытаюсь сохранить Xyz, он работает без ошибок, но ничего не сохраняется в БД, поэтому мое предположение заключается в том, что транзакция не создается д. Если я делаю em.getTransaction().begin(), это дает ошибку Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead. Если я делаю em.flush(), он говорит, что нет транзакции. Поэтому я должен делать что-то неправильно, но не могу понять, что именно.

+0

Вы управляете транзакцией самостоятельно или через Spring, используете ли вы аннотации '@ Transactional', как вы создаете/плагируете своего менеджера транзакций с транзакцией –

+0

@ ankur-singhal, что мне не хватает из вышеперечисленного? – ikcodez

ответ

0
  • EntityManager - это объект, полученный от Factory Manager. Вы должны ввести блок сопротивления MyEntityManager в ссылку объекта EntityManagerFactory и использовать его, чтобы получить экземпляр EntityManager.

    @PersistenceUnit(unitName = "MyEntityManager") 
    private EntityManagerFactory entityManagerFactory; 
    
    ..... 
    
    @Transactional 
    public void create(Xyz xyz) { 
        EntityManager entityManager = entityManagerFactory.createEntityManager(); 
        entityManager.persist(xyz); 
    } 
    
    ..... 
    

Проверить this также.

0

ОК, я не уверен, что это хорошая идея, чтобы ответить на мой собственный вопрос, но в основном RESOURCE_LOCAL по какой-то причине не сработала, поэтому мне пришлось переключиться на JTA. Так, настойчивость в настоящее время работает, и файлы выглядеть следующим образом:

DAO:

public class XyzDAO { 
    @PersistenceContext 
    private EntityManager em; 

    @Transactional 
    public void create(Xyz xyz) { 
     em.persist(xyz); 
    } 

    public void setEntityManager(final EntityManager em) { 
     this.em = em; 
    } 
} 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" .....> 
    <persistence-unit name="MyEntityManager" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/datasource/VAP_XA</jta-data-source> 
    <class>.....Xyz</class> 
    ..... 
    </persistence-unit> 
</persistence> 

Никаких изменений в config.xml. Надеюсь, это поможет любому, и спасибо за ответы.

+0

Вы пытались с тем, что я предложил? Разве это не работало? –

Смежные вопросы