2017-03-10 3 views
0

Ich habe die folgende Methode, die den Datensatz nicht bestehen bleibt. Wenn ich eine andere Abfrage von einem Servlet aus führe und diesen Datensatz nach der Aktualisierung durch den Restdienst aufspüre, sehe ich die Änderungen nicht. Irgendwelche Ideen, warum es nicht beibehalten wird? Ich habe auch mit flush() und/oder clear() ohne Glück versucht:Jetty + Hibernate + JPA-Transaktionen nicht mit H2

@POST 
@Path("translations") 
@Produces({MediaType.APPLICATION_JSON}) 
@Consumes({MediaType.APPLICATION_JSON}) 
public Translation updateTranslationValue(Translation translation,  
@Context HttpServletRequest request) { 
    request.getSession().setAttribute("reload_xlate", true); 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    em.getTransaction().begin(); 

    TypedQuery<Translation> query = em.createQuery(
      "SELECT t FROM Translation t WHERE t.key = :key", Translation.class); 
    query.setParameter("key", translation.getKey()); 
    Translation mappedTranslation = query.getSingleResult(); 
    mappedTranslation.setValue(translation.getValue()); 
    L.info("Updated: {}", mappedTranslation); 
    //em.flush(); 
    //em.clear(); 
    em.getTransaction().commit(); 
    em.close(); 
    return mappedTranslation; 
} 

Hier ist meine persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="MyJPAJAXRS" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <non-jta-data-source>jdbc/myds</non-jta-data-source> 
    <properties> 
     <property name="javax.persistence.schema-generation.database.action" 
       value="drop-and-create"/> 
     <property name="javax.persistence.sql-load-script-source" value="META-INF/seed.sql"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Meine Jetty Datenquelle:

<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource"> 
     <Arg>jdbc/myds</Arg> 
     <Arg> 
      <New class="com.zaxxer.hikari.HikariDataSource"> 
       <Arg> 
        <New class="com.zaxxer.hikari.HikariConfig"> 
         <!--<Set name="minimumPoolSize">5</Set>--> 
         <!--<Set name="maximumPoolSize">20</Set>--> 
         <Set name="dataSourceClassName"> 
          org.h2.jdbcx.JdbcDataSource 
         </Set> 
         <Call name="addDataSourceProperty"> 
          <Arg>url</Arg> 
          <Arg>jdbc:h2:mem:test_mem</Arg> 
         </Call> 
        </New> 
       </Arg> 
      </New> 
     </Arg> 
    </New> 
</Configure> 

Antwort

0

Turns Für H2 müssen die Einstellungen für den Datenbankpool auf 1 Verbindung geändert werden:

<Set name="minimumPoolSize">1</Set> 
<Set name="maximumPoolSize">1</Set> 

Das hat den Trick gemacht.