java - 在 Hibernate 中阻止写操作

标签 java database hibernate spring

Hibernate 中的写入特定操作是否会阻塞?我的意思是,如果我执行:

session.save(data);

来自注释为@Transactional的方法,是否保证每个

session.get(id);

来自不同线程的调用,在该行之后立即执行,将返回正确的数据(非空)?

最佳答案

您获得的结果取决于事务隔离级别。 Spring 允许以下隔离级别:

DEFAULT Use the default isolation level of the underlying datastore.

READ_COMMITTED A constant indicating that dirty reads are prevented; non-repeatable reads and phantom reads can occur.

READ_UNCOMMITTED A constant indicating that dirty reads, non-repeatable reads and phantom reads can occur.

REPEATABLE_READ A constant indicating that dirty reads and non-repeatable reads are prevented; phantom reads can occur.

SERIALIZABLE A constant indicating that dirty reads, non-repeatable reads and phantom reads are prevented.

调用save()(或flush())并不能保证事务已提交。如果您的事务(调用 save() 的地方)在调用 get() 之前提交,您将始终在新线程中获得正确的结果。但是,如果事务没有提交,是否得到正确的结果取决于事务隔离级别。您将在允许“脏读”的隔离级别中获得正确的结果。

关于java - 在 Hibernate 中阻止写操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664940/

相关文章:

java - 自己的偏好页面 : Enable and disable FieldEditor by BooleanFieldEditor

mysql - 我希望MySQL查询结果在同一行

ruby-on-rails - 如何在 Rails 中传递动态参数?

mysql - SQL如何从另一个表中求和并插入到另一个表中

spring - 如何使用 Spring Data JPA 和 Spring Security 实现 AuditorAware?

java - Spring批量集成

java - 将来自 REST Assured 测试的请求和响应详细信息添加到 Surefire 报告

java - CalendarContract:列“dtstart”无效(使用injectCalendar())

java - Spring/Hibernate 连接泄漏与 ScrollableResults

java - Spring/Hibernate 添加一个在关闭 EntityManagerFactory 之前运行的关闭钩子(Hook)