У вас нет последовательностей в Mysql, но вы можете использовать генерацию идентификатора 'TABLE'
@javax.persistence.TableGenerator(
name="EMP_GEN",
table="GENERATOR_TABLE",
pkColumnName = "key",
valueColumnName = "hi"
pkColumnValue="EMP",
allocationSize=20
)
@Entity
public class Klass {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator=EMP_GEN)
@Column(name = "ID")
private Long id;
}
Возможно, вам понадобится добавить фрагмент @javax.persistence.TableGenerator [...]
во все ваши объекты
Редактировать
Спасибо большое. Но есть ли у нас другой способ использовать этот фрагмент, не добавляя его к каждой сущности? И когда я создаю таблицы в базе данных, как я могу объявить столбец первичного ключа ID для СУБД, чтобы автоматически сгенерировать это значение? - наполеонит76
К сожалению, я не знаю элегантного способа сделать это :(. В моем проекте мы используем последовательность в нескольких сущностях, и нам нужно объявить последовательность в каждом классе.
Одна вещь, которую вы можете попробовать (но мне не очень нравится), это создать суперкласс для всех ваших сущностей, и этот суперкласс содержит только поле идентификатора и аннотации. У меня такое чувство, что я видел это в проекте, но я не уверен на 100%.
О том, чтобы сказать БД об использовании этой стратегии, я не думаю, что это действительно возможно. Вы можете попробовать добавить триггер и применить его к каждой таблице в схеме. Триггер сработает, когда вы вставите новую строку в таблицу, выберете значение из таблицы генератора и добавите его в строку. Честно говоря, я не знаю, может ли это сработать, и я на 99% уверен, что это не сработает, если у вас есть 2 одновременных сеанса, создающих строки.
Можете ли вы переосмыслить свою стратегию и использовать обычные столбцы автоинкремента для идентификаторов и поместить порядковый номер в другой столбец ваших таблиц?