I'm developing an API with Spring boot where I encounter this issue. I want to generate 6 digits number every time there's a new register to insert into column referral_code, where it has to be UNIQUE. Here is my entity
@Entity
public class StoreEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "store_name", columnDefinition = "varchar(255) default '' not null")
private String storeName;
@Column(name = "referral_code", columnDefinition = "varchar(255) default '' not null")
private String referralCode;
@Column(name = "created_at", columnDefinition = "timestamp default current_timestamp not null")
private Timestamp createdAt = new Timestamp(System.currentTimeMillis());
}
in my register service, I have created a generate a random number with this method (reference)
protected String createRandomReferralCode(){
Random r = new Random();
int numbers = 100000 + (int)(r.nextFloat() * 899900);
return String.valueOf(numbers);
}
so when the new store register, I'm getting the number from the above function and set it to referralCode. Here's the register function
public StoreEntity register(StoreDto storeDto) {
StoreEntity storeEntity = new StoreEntity();
//----call to generate random 6 digit code-----
String generateReferralCode = createRandomReferralCode();
storeEntity.setStoreName(storeDto.getStoreName());
storeEntity.setReferralCode(generateReferralCode);
return storeDao.save(storeEntity);
}
now, my problem is how can we ensure that the number getting from the above function createRandomReferralCode()
always generates a unique one?
ATTEMPTS: in my repository, I've created a function findReferralCode, to check if the referral code already exists in the table row; however, doing so seems to slow down the application's performance.
@Repository
public interface StoreDao extends JpaRepository<StoreEntity, Long> {
StoreEntity findReferralCode(String referralCode);
}