[英]Concurrent data access with Spring Data
我是Spring Data / Hibernate的新手,我試圖讓您了解如何處理並發用戶訪問數據。
假設我有一個非常簡單的域模型,包括房屋和住在這些房屋中的人:
屋:
@Entity
public class House {
@Id
@GeneratedValue
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private Set<Person> persons;
public void addPerson(Person p) {
persons.add(p);
public Set<Person> getPersons() {
return persons;
}
}
人:
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
}
目前,我正在從HouseRepository加載房屋,並使用此對象來獲取/添加人員。
所有這些對於單個用戶都可以正常工作,但是您應該如何支持並發用戶呢? 也就是說,假設我有一個Web應用程序,該應用程序有2個並發用戶,這兩個用戶都希望查看和添加/編輯來自同一房屋的人員。
什么是標准/最佳實踐?
編輯:闡明我想做什么:
編輯:@Transactional問題-
@SpringBootApplication
public class ExampleApplication implements CommandLineRunner {
@Autowired
private HouseRepository houseRepository;
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
@Override
public void run(String... strings) throws Exception {
House house = new House();
Person person = new Person();
person.setName("Bob");
house.addPerson(person);
houseRepository.save(house);
printPeople(house.getId());
}
@Transactional
public void printPeople(Long id) {
House house = houseRepository.findOne(id);
for (Person person : house.getPersons()) {
System.out.println(person.getName());
}
}
}
引發org.hibernate.LazyInitializationException:無法延遲初始化角色集合:com.example.House.persons,無法初始化代理-printPeople中的foreach循環處沒有Session
通常希望在事務內使用JPA。 使用Spring的@Transactional
AOP標記您的事務邊界,它將處理並發訪問。 將@Transactional
應用於相關的最高級別方法,該方法通常是Web應用程序的MVC控制器方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.