In nutshell, you can use multiple sequence generators for one entity but for primary keys only (composite primary key).
From SequenceGenerator documentation:
Defines a primary key generator that may be referenced by name when a generator element is specified for the GeneratedValue annotation. A sequence generator may be specified on the entity class or on the primary key field or property. The scope of the generator name is global to the persistence unit (across all generator types).
Code example:
public class TestPK implements Serializable {
private Integer test1;
private Integer test2;
...
}
@Entity
@IdClass(TestPK.class)
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "seq_test1", sequenceName = "seq_test1", allocationSize = 7)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_test1")
@Column(name = "test1", unique = true, nullable = false)
private Integer test1;
@Id
@Column(name = "test2", nullable = false, unique = true)
@SequenceGenerator(name = "seq_test2", sequenceName = "seq_test2", allocationSize = 7)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_test2")
private Integer test2;
...
@Override
public String toString() {
return "Test{" +
"test1=" + test1 +
", test2=" + test2 +
'}';
}
}
public interface TestRepository extends Repository<Test, String> {
Page<Test> findAll(Pageable pageable);
void save(Test test);
}
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private TestRepository testRepository;
@Override
public void run(String... args) throws Exception {
testRepository.save(new Test());
Page<Test> all = testRepository.findAll(null);
System.out.println(all.iterator().next());
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}