Salut

j'utilise spring boot, spring-data jpa et mysql

Dans une application de gestion de gym, pour le memberId la valeur utilisait un autoincrement de mysql


Gym A crée un membre, memberId = 1
Gym B crée un membre, memberId = 2
Gym A crée un membre, memberId = 3

Il voudrait avoir un générateur pour chaque gym.

J'ai créer un nouveau champs memberNumber pour membre.

Gym A crée un membre, memberId = 1, memberNumber=1
Gym B crée un membre, memberId = 2, memberNumber=1
Gym A crée un membre, memberId = 3, memberNumber=2

au niveau de la bd

Dans la table gym j'aurais un champ currentGeneratorValue

ConfigGenerator

gym currentGeneratorValue
1 2
2 2
3 18

Je cherche une façon de lire currentGeneratorValue, sauvegarder le membre, mettre la nouvelle valeur dans currentGeneratorValue.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public class Member{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long memberId;  
    private Long memberNumber;
}
Dans mon service

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
@Service
public class MemberServiceImpl implements MemberService{
    private final MemberRepository memberRepository;
 
    public MemberServiceImpl(final MemberRepository memberRepository){
        this.memberRepository =memberRepository;
    }
 
    public Long memberSave(MemberDto memberDto) throws ResourceNotFoundException{
      Member member=null;
 
      if(memberDto==null){
         throw new  ResourceNotFoundException("Member null");
      }
 
      if(memberDto.getMemberId()!=null){
         member=memberRepository.findOne(memberDto.getMemberId());
      }
 
      convertToBean(memberDto, member);
 
      if(member==null){
        member = new Member();
 
        //get current value
        //set value for memberNumber field
         memberRepository.save(member);
        //update value
      }else{
      }
      memberRepository.save(member);
    }
 
    public synchronized Long getCurrentValue(){
       ...
    }
 
    public synchronized Long setCurrentValue(){
     ...
    }
 
}
Je pensais utiliser des sychronized et faire une transaction manuellement?

des meilleurs façon?