Проблемы с работой GenerationType.SEQUENCE

69
14 октября 2021, 13:30

В базе данных есть последовательность seq2. В своем классе-сущности назначил эту последовательность как генератор:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "seq2")
private int id;

В базе данных в качестве генератора тоже вручную установил эту последовательность (до этого была стандартная инкрементация). Но вот проблема, при попытке добавить экземпляр класса в БД, вылетает исключение:

    Исключение!org.hibernate.MappingException: Could not instantiate id generator [entity-name=models.User]
Exception in thread "main" java.lang.NullPointerException
    at dao.UserDao.save(UserDao.java:18)
    at services.UserService.saveUser(UserService.java:21)
    at Main.main(Main.java:18)

Однако, если в СУБД написать это через INSERT, то все работает. Думал думал, поставил в классе обратно GenerationType.IDENTITY:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

Теперь все работает... но не так. Теперь записи добавляются, причем используется именно последовательность seq2, т.к. я ее в БД вручную изменил. Так вот, так ведь не должно быть? Если есть тип SEQUENCE, то почему для использования моей последовательности, мне надо использовать IDENTITY? Или это работает, только Hibernate самостоятельно создает БД по твоей сущности? Или я что-то делаю не так?

Answer 1
@Id
@SequenceGenerator(name = "seq2", sequenceName = "seq2", allocationSize = 1, initialValue = 10000)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq2")
//    @Column(name = "id", unique = true, nullable = false, columnDefinition = "integer default nextval('seq2')")
private int id;
Answer 2
@Id
@SequenceGenerator(name = "RM_SEQ", sequenceName = "ROOM_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "RM_SEQ")
@Column(name = "ID")
public long getId() {
  return id;
  }
READ ALSO
Как работает @JoinColumn

Как работает @JoinColumn

Видел много примеров, но все еще не совсем понимаю, в каких случаях пишется эта аннотацияВот допустим у нас сущности User и Book, между ними отношения...

220
Как сделать из строки численное выражение? [дубликат]

Как сделать из строки численное выражение? [дубликат]

Пишу калькулятор, в который можно вбивать математические выражения любой длины, после чего пользователь нажимает клавишу "=" и калькулятор...

97