@Override public BigInteger next(ErraiEntityManager entityManager) { BigInteger nextAvailableId = nextCandidateId; while (entityManager.isKeyInUse(new Key<X, BigInteger>((ErraiIdentifiableType<X>) attr.getDeclaringType(), nextAvailableId))) { nextAvailableId = nextAvailableId.add(new BigInteger(String.valueOf(Math.random() * probeJumpSize))); } nextCandidateId = nextAvailableId.add(BigInteger.ONE); return nextAvailableId; }
@Override public Long next(ErraiEntityManager entityManager) { while (entityManager.isKeyInUse(new Key<X, Long>((ErraiIdentifiableType<X>) attr.getDeclaringType(), nextCandidateId))) { nextCandidateId += (long) (Math.random() * probeJumpSize); // control rollover in case we run out of values if (nextCandidateId >= Long.MAX_VALUE - probeJumpSize) { nextCandidateId = 0; } } return nextCandidateId++; } }
@Override public Integer next(ErraiEntityManager entityManager) { while (entityManager.isKeyInUse(new Key<X, Integer>((ErraiIdentifiableType<X>) attr.getDeclaringType(), nextCandidateId))) { nextCandidateId += (int) (Math.random() * probeJumpSize); // control rollover in case we run out of values if (nextCandidateId >= Integer.MAX_VALUE - probeJumpSize) { nextCandidateId = 1; } } return nextCandidateId++; }