gpt4 book ai didi

hibernate - .persist() 不返回任何错误,但我的持久数据在哪里?

转载 作者:行者123 更新时间:2023-12-03 08:21:43 24 4
gpt4 key购买 nike

在我的 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); 上设置了一个断点,客户端有一个 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()

关于hibernate - .persist() 不返回任何错误,但我的持久数据在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1854773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com