当涉及到在spring JPA中锁定时,我真的不安全。
所以请将此问题视为一个澄清。我真的希望我理解的正确,但我的英语不太好理解复杂的博客文章。
所以这是我想我从一些文章中得到的:
锁定有两种基本类型:
为什么现在会有这么多的分锁,分锁是做什么的?当“optimatic”是我试图理解的顶部的乐观锁时,那么“optimistic_force_incement”是什么?
版本更新与此有什么关系?(还是@version
?)
继续:
锁在Spring JPA中有三种基本用法:
>
在普通列上,例如:
@Entity
public class PersonEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Lock(LockModeType.PESSIMISTIC_WRITE)
private String name;
}
@Entity
public class PersonEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Lock(LockModeType.PESSIMISTIC_WRITE)
@OneToOne
private Group group;
}
在存储库中的表上,例如:
interface PersonRepository extends Repository<Person, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
Person findOne(Long id);
}
使用直接锁定实体
@Entity
@Lock(LockModeType.PESSIMISTIC_WRITE)
public class PersonEntity { }
是不可能的。因此,您可以使用3(在存储库内部锁定)。
@Transactional
public void test(){
System.out.println("start, but not locked yet");
PersonEntity person1 = personRepository.findOne(1L); // locks this person or must wait, when locked
System.out.println("now locked");
// do something
return true; // now the lock will be deleted -> unlocked again
}
public void test(){
System.out.println("start, but not locked yet");
PersonEntity person1 = personRepository.findOne(1L); // locks this person or must wait, when locked
System.out.println("now locked");
// do something
person1 = null; // now the lock will be deleted -> unlocked again
System.out.println("not locked anymore");
// do something more
return true;
}
最后一句话:
我真的希望我不会惹恼别人。但就像我说的:我真的很难理解英语中如此复杂的结构:(
所以非常感谢你们的帮助:)我真的很感激你们的帮助。不管你给我的链接是为了更多的理解还是直接回答我的问题:)
锁定
锁定用于防止脏读取(读取尚未提交的数据)和不可重复读取(读取在一个读取完成之前被另一个事务删除的数据)。
乐观
悲观的写作
强制序列化更新的排他锁。在乐观锁定仅保存状态的情况下,它被锁定以防止并发操作发生事务失败/死锁的情况。
悲观写力增量
类似于它的乐观对应物,一个更新对象版本的悲观写。为非版本化对象引发异常。
我开始制作一个简单的spring boot应用程序。 我的第一步是利用Spring JDBC支持,使用默认的H2内存数据库。对于示例数据,我在src/main/resources中有schema.sql和data.sql。 所以当spring启动时,它也会执行这两个脚本并填充H2数据库,我可以通过H2控制台访问它。
我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样: 当我尝试运行我的代码时,它的返回 org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boo
我正在开发一个spring批处理应用程序(内存为2GB),尝试处理数据(在处理过程中使用select查询获取数据),并在postgres DB中插入大约100万条处理过的记录。我在这个项目中使用Spring Data JPA。但是Spring JPA在处理这些记录时消耗了太多内存
我试图构建一个基于wicket、Spring jpa存储库和MySQL的应用程序。 问题是,我的Service类只是不想自动配线。如果我想使用自动配线的类,我有一个空指针异常。 事实上,我得到了双空指针:我的BaseServiceConfig。java不会自动连接实现,itnerface中的自动连接存储库也为空。所以,问题是为什么。 我试图用最少甚至没有xml的方式实现这一点,所有的配置都是在ja
我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save
在我的Spring Boot应用程序中有POJO,下面是它的样子: 现在我想选择所有与给定值相关的方式是POJO的成员。 所以这是我的查询
我试图写这个来获取列表,我必须将ID列表作为参数传递: 我的实体是我用来查询的实体是: 但我在运行后遇到了以下异常: 有人能帮我用上面的方法获取列表吗?或者能告诉我我在这方面做错了什么。我不想使用本机,即(nativeQuery=true)使用这个。
我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗