Pregunta

En mi aplicación DAO que estoy haciendo Stripersist.getEntityManager().persist(client);, esto no parece volver a los errores, pero no puedo encontrar los datos que persiste.

Mi objeto cliente es el siguiente:

@Entity
public class Client implements Serializable
{

    @Id
    @GeneratedValue
    private Integer id;
    @Column
    private String name;

    //accessors etc here
 ...
 }

Tengo una unidad de persistencia y es como sigue

<persistence-unit name="stripes" transaction-type="RESOURCE_LOCAL">
      <!-- Tell JPA to use Hibernate -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <!--Hibernate settings -->
        <properties>
         <!--Autodetect entity classes -->
            <property name="hibernate.archive.autodetection" value="class"/>
         <!--Automatically create the SQL schema -->
            <property name="hibernate.hbm2ddl.auto" value="create"/>
       <!--Tell Hibernate to use HSQLDB -->
            <property name="hibernate.dialect"
        value="org.hibernate.dialect.DerbyDialect" />
            <property name="hibernate.connection.driver_class"
        value="org.apache.derby.jdbc.ClientDriver" />
       <!--Configure the JDBC database connection-->
            <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/salestracker" />
            <property name="hibernate.connection.username" value="admin"/>
            <property name="hibernate.connection.password" value="admin"/>
            <property name="jdbc.batch_size" value="0"/>
       <!--Configure the connection pool--> 
            <property name="hibernate.c3p0.min_size" value="5"/>
            <property name="hibernate.c3p0.max_size" value="20"/>
            <property name="hibernate.c3p0.timeout" value="300"/>
            <property name="hibernate.c3p0.max_statements" value="50"/>
            <property name="hibernate.c3p0.idle_test_period" value="3000"/>
        </properties>
    </persistence-unit>

Como digo, he establecido un punto de interrupción en el .persist(client);, el cliente tiene un conjunto name, y tiene null para una id (.merge() otro modo, hubiera usado), por lo tanto, no estoy seguro de por qué el los datos no se conserva?

Si miro a la mesa, CLIENT, tiene 0 filas.

SELECT * FROM ADMIN.CLIENT

Executed successfully in 0.001 s.
Line 1, column 1

Execution finished after 0.001 s, 0 error(s) occurred.

¿Es posible que la entidad está siendo persistió, pero no se confirma la transacción?

Gracias

EDIT: Aquí hay alguna información de registro

INFO: 09:24:32,002 DEBUG JpaTransactionManager:285 - Found thread-bound EntityManager [org.hibernate.ejb.EntityManagerImpl@4e65ad52] for JPA transaction
INFO: 09:24:32,002 DEBUG JpaTransactionManager:371 - Creating new transaction with name [com.jameselsey.salestracker.service.ClientService.persistClient]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
INFO: 09:24:32,002 DEBUG JDBCTransaction:82 - begin
INFO: 09:24:32,003 DEBUG ConnectionManager:444 - opening JDBC connection
INFO: 09:24:32,003 DEBUG JDBCTransaction:87 - current autocommit status: true
INFO: 09:24:32,003 DEBUG JDBCTransaction:90 - disabling autocommit
INFO: break
INFO: 09:24:40,960 DEBUG SessionImpl:247 - opened session at timestamp: 12600914809
INFO: 09:24:40,961 DEBUG JDBCTransaction:82 - begin
INFO: 09:24:40,962 DEBUG ConnectionManager:444 - opening JDBC connection
INFO: 09:24:40,965 DEBUG JDBCTransaction:87 - current autocommit status: true
INFO: 09:24:40,966 DEBUG JDBCTransaction:90 - disabling autocommit
INFO: 09:24:40,993 DEBUG AbstractBatcher:585 - opening JDBC connection
INFO: 09:24:40,993 DEBUG DriverManagerConnectionProvider:132 - opening new JDBC connection
INFO: 09:24:40,996 DEBUG DriverManagerConnectionProvider:138 - created connection to: jdbc:derby://localhost:1527/salestracker, Isolation Level: 2
INFO: 09:24:40,997 DEBUG SQL:111 - select next_hi from hibernate_unique_key for read only with rs
INFO: 09:24:41,001 DEBUG SQL:111 - update hibernate_unique_key set next_hi = ? where next_hi = ?
INFO: 09:24:41,006 DEBUG AbstractBatcher:606 - closing JDBC connection (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)
INFO: 09:24:41,007 DEBUG TableHiLoGenerator:87 - new hi value: 0
INFO: 09:24:41,007 DEBUG AbstractSaveEventListener:135 - generated identifier: 1, using strategy: org.hibernate.id.TableHiLoGenerator
INFO: 09:24:41,036 DEBUG JpaTransactionManager:730 - Initiating transaction commit
INFO: 09:24:41,037 DEBUG JpaTransactionManager:451 - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@4e65ad52]
INFO: 09:24:41,037 DEBUG JDBCTransaction:134 - commit
INFO: 09:24:41,038 DEBUG JDBCTransaction:227 - re-enabling autocommit
INFO: 09:24:41,038 DEBUG JDBCTransaction:147 - committed JDBC Connection
INFO: 09:24:41,039 DEBUG ConnectionManager:427 - aggressively releasing JDBC connection
INFO: 09:24:41,039 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
INFO: 09:24:41,047 DEBUG JpaTransactionManager:539 - Not closing pre-bound JPA EntityManager after transaction
INFO: 09:24:41,047 DEBUG ExecutionContext:183 - Transitioning to lifecycle stage ResolutionExecution
INFO: 09:24:41,048 DEBUG HttpCacheInterceptor:183 - Looking for HttpCache on com.jameselsey.salestracker.action.ViewClientAction.save()
INFO: 09:24:41,160 DEBUG ExecutionContext:183 - Transitioning to lifecycle stage RequestComplete
INFO: 09:24:41,161 DEBUG JDBCTransaction:186 - rollback
INFO: 09:24:41,161 DEBUG JDBCTransaction:227 - re-enabling autocommit
INFO: 09:24:41,162 DEBUG JDBCTransaction:197 - rolled back JDBC Connection
INFO: 09:24:41,162 DEBUG ConnectionManager:427 - aggressively releasing JDBC connection
INFO: 09:24:41,162 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
INFO: 09:24:41,163 DEBUG OpenEntityManagerInViewFilter:119 - Closing JPA EntityManager in OpenEntityManagerInViewFilter
INFO: 09:24:41,163 DEBUG EntityManagerFactoryUtils:313 - Closing JPA EntityManager
¿Fue útil?

Solución

libremente citando las especificaciones Java EE, cada vez que usted dice em.persist(obj), que no significa necesariamente una consulta SQL directo a la base de datos. Esto significa que la entidad nombrada obj tendrá un identidad persistente , por lo que está será salvado Estado y vuelca en el almacén persistente en algún tiempo, tal vez justo después de su llamada persist, tal vez después de la transacción, que depende de su proveedor de JPA. Esto podría significar que si se llama persist a una entidad y una pausa en la aplicación con un punto de interrupción, sus datos no serán persistido en la base de datos inmediatamente.

Si desea tener una consulta SQL justo después de la persistencia de una entidad, podría ejecutar em.flush().

Otros consejos

¿Se hace esto, después de llamar persist()?

Stripersist.getEntityManager().getTransaction().commit();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top