2010-11-20 7 views
1

In dem folgenden Code gibt persist() ohne eine Ausnahme zurück, aber die Entität wird nicht in der Datenbank gespeichert.Im Frühjahr MVC 3.0.5 Controller JPA-Entität wird nicht dauerhaft in der Datenbank

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

Ich brauche keine Transaktionsunterstützung oder jede Phantasie Unternehmen Funktion unterstützen. Ich möchte einfach eine Entität erstellen und sie in der Datenbank speichern.

Wohin gehe ich falsch?

Antwort

2

persist() schreibt Ihr Objekt nicht sofort in die Datenbank. Stattdessen markiert es Ihr Objekt als Persistent, so dass es in der Datenbank vor dem Festschreiben der Transaktion (oder vor dem Ausführen einer Abfrage oder während der expliziten Operation flush()) geschrieben wird.

Also, auch wenn Sie kein Transaktionsverhalten benötigen, müssen Sie noch Transaktionen verwalten. Sie können es manuell tun, wie folgt:

@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(); 
     ... 
} 

Aber ein bequemer Weg ist, es zu tun.

Verwandte Themen