2010-11-20 2 views
1

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

@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> 

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

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

ответ

2

persist() не записывает ваш объект в базу данных немедленно. Вместо этого он отмечает ваш объект как постоянный, так что он будет записан в базу данных до совершения транзакции (или перед выполнением запроса или при явной операции 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(); 
     ... 
} 

Но более удобный способ сделать это.

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