我已经浏览了Java Persistence API 2.0 Final
Release规范的3.4.4 锁定模式 部分,虽然找不到任何 特定的 东西(它没有声明 这
是默认值或类似的东西),但是有一个脚注说以下。
锁定模式类型NONE可以指定为锁定模式参数的值,并且还为注释提供默认值。
本节介绍了
LockModeType可用值的种类及其用法,并介绍了哪些方法接受此类参数,而没有其他方法。
因此,正如它所说的那样
LockModeType.NONE,注解是默认的(JPA,左右注解),我想应该在使用
EntityManager.find(Class,Object)默认
LockModeType值时使用。
还有其他一些 微妙的 提示可以加强这一点。3.1.1节 EntityManager接口 。
无需在事务上下文中调用find方法(假设它不带锁地调用或使用LockModeType.NONE调用)和getReference方法。
这说得通。例如,如果您使用MySQL作为数据库,而您选择的数据库引擎是InnoDB,那么(默认情况下)您的表将使用
REPEATABLEREAD,如果您使用其他RDBMS或其他数据库引擎,则可能会改变。
现在,我不能完全确定隔离级别是否与JPA锁定模式有关(尽管似乎是这样),但是我的观点是,不同的数据库系统有所不同,因此JPA无法为您做出决定(至少根据规范)默认使用哪种锁定模式,因此,
LockModeType.NONE如果您没有其他说明,它将使用该模式。
我还找到了有关隔离级别和锁定模式的文章,您可能想阅读。
哦,回答您的最后一个问题。
如果不定义显式锁定模式,是否会丢失数据库完整性?
这 要看情况 ,但是如果您有并发事务,那么答案可能 是肯定的 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)