문제

내 DAO 구현에서 나는하고있다 Stripersist.getEntityManager().persist(client);, 이것은 오류를 반환하지 않는 것 같지만 지속되는 데이터를 찾을 수 없습니다.

내 클라이언트 객체는 다음과 같습니다.

@Entity
public class Client implements Serializable
{

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

    //accessors etc here
 ...
 }

나는 하나의 지속성 단위가 있고 다음과 같습니다

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

내가 말했듯이, 나는 .persist(client);, 클라이언트에는 a name 설정하고 가지고 있습니다 null 용을 위해 id (그렇지 않으면 내가 사용했던 것입니다 .merge()) 따라서 데이터가 지속되지 않은 이유는 확실하지 않습니까?

테이블을 보면 CLIENT, 그것은 0 줄이 있습니다.

SELECT * FROM ADMIN.CLIENT

Executed successfully in 0.001 s.
Line 1, column 1

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

실체가 지속될 수 있지만 거래가 커밋되지 않았습니까?

감사

편집 : 로깅 정보는 다음과 같습니다

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
도움이 되었습니까?

해결책

당신이 말할 때마다 Java EE 사양을 자유롭게 인용 em.persist(obj), 그것 그렇지 않습니다 반드시 데이터베이스에 대한 직접 SQL 쿼리를 의미합니다. 그것은 엔티티의 이름을 의미한다는 것을 의미합니다 obj 가질 것입니다 지속적인 정체성, 따라서 상태는 시간에, 아마 persist 거래 후에는 JPA 제공 업체에 따라 다릅니다. 이것은 당신이 전화하면 persist 엔티티와 브레이크 포인트로 응용 프로그램을 일시 중지하려면 지속적인 데이터가 데이터베이스에 즉시 있지 않습니다.

엔티티를 지속 한 직후 SQL 쿼리를 원한다면 실행할 수 있습니다. em.flush().

다른 팁

전화 후이 작업을 수행 했습니까? persist()?

Stripersist.getEntityManager().getTransaction().commit();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top