В Spring MVC 3.0.5 сущность контроллера JPA не сохраняется в базе данных - PullRequest
1 голос
/ 20 ноября 2010

В приведенном ниже коде persist () возвращает исключение, но объект не сохраняется в базе данных.

@RequestMapping(method = RequestMethod.POST)
public String form() {
        EntityManager em = this.emf.createEntityManager();
        TaxRates t = new TaxRates();
        t.setCountry("US");
        // set more properties
        em.persist(t);
        em.close();
        ...
 }

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
  <persistence-unit name="TT-SpringMVCPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    ...
    <class>com.sajee.db.TaxRates</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:jtds:sqlserver://localhost:1234/mydb"/>
      <property name="javax.persistence.jdbc.password" value="Password1"/>
      <property name="javax.persistence.jdbc.driver" value="net.sourceforge.jtds.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
    </properties>
  </persistence-unit>
</persistence>

Мне не нужна поддержка транзакций или какая-либо поддержка корпоративных функций. Я просто хочу создать сущность и сохранить ее в базе данных.

Куда я иду не так?

1 Ответ

2 голосов
/ 20 ноября 2010

persist() не записывает ваш объект в базу данных немедленно. Вместо этого он помечает ваш объект как persistent , так что он будет записан в базу данных до принятия транзакции (или до выполнения запроса, или во время явной операции flush()).

Итак, даже если вам не нужно транзакционное поведение, вам все равно придется управлять транзакциями. Вы можете сделать это вручную следующим образом:

@RequestMapping(method = RequestMethod.POST) 
public String form() { 
        EntityManager em = this.emf.createEntityManager(); 
        TaxRates t = new TaxRates(); 
        t.setCountry("US"); 
        // set more properties 
        em.getTransaction().begin();
        em.persist(t); 
        em.getTransaction().commit();
        em.close(); 
        ... 
}

Но Поддержка декларативных транзакций Spring - более удобный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...