Я создал приложение для голосования, и у меня есть метод, который изменяет количество голосов.Он реализует интерфейс с аннотацией @Transactional.
@Transactional(readOnly = true)
public interface VotingService {
Vote getByRestaurantId(int restaurantId);
Vote get(int id);
List<Vote> getWithRestaurantsByDate(LocalDateTime date);
List<Vote> getWithRestaurantsToday(HttpServletResponse response, int id);
@Transactional
Vote voteFor(int restaurantId, int userId);
}
Я использую SpringBoot. Будет ли он работать правильно при одновременном голосовании нескольких пользователей.И как вы можете протестировать такое действие?
Последовательное голосование работает правильно.
Код для изменения количества голосов, например:
@Service
public class VotingServiceImpl implements VotingService {
...
@Override
public Vote voteFor(int restaurantId, int userId) {
...
Vote vote = getByRestaurantId(restaurantId);
vote.setNumberOfVotes(vote.getNumberOfVotes() + 1)
...
return vote;
...
}
...
}
@Entity
@Table(name = "votes", uniqueConstraints = {@UniqueConstraint(columnNames = {"restaurant_id", "date", "votes"}, name = "votes_unique_restaurant_date_votes_idx")})
public class Vote extends AbstractEntity {
@Column(name = "votes")
private int numberOfVotes;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "restaurant_id", nullable = false)
@NotNull
private Restaurant restaurant;
public int getNumberOfVotes() {
return numberOfVotes;
}
public void setNumberOfVotes(int numberOfVotes) {
this.numberOfVotes = numberOfVotes;
}
public Vote() {
}
public Restaurant getRestaurant() {
return restaurant;
}
public void setRestaurant(Restaurant restaurant) {
this.restaurant = restaurant;
}
@Override
public String toString() {
return "Vote{" +
super.toString() +
"numberOfVotes=" + numberOfVotes +
", restaurant=" + restaurant +
'}';
}
}
Спасибо!