Существует несколько решений, которые удовлетворяют вашим требованиям, но в разных аспектах они отличаются друг от друга, и вы должны выбрать лучший.
Некоторые решения существуют в контексте БД. (например, ответ @Gregory), , но некоторые другие решения не зависят от типа БД и конкретных функций. это означает, что вы реализуете свое решение независимо от вашего типа db, и вы можете изменить свой db (oracle, sql-server, my-sql, ...), и вам не нужно менять свой Java-код. В jpa есть три стратегии последовательности для решения этой проблемы с помощью @GeneratedValue.
1) Секвенирование таблицы: для этой цели вы используете отдельную таблицу для своей цели. в этой таблице содержатся соответствующие идентификаторы для других таблиц с автоинкрементами с этой стратегией.
2) Объекты последовательности: вы используете объект последовательности в своих db и jpa обрабатываете его. Объекты последовательности поддерживаются только в некоторых базах данных, таких как Oracle, DB2 и Postgres.
3) Последовательность идентификации: использует специальные столбцы IDENTITY в базе данных, чтобы позволить базе данных автоматически назначать идентификатор объекту при его вставке. Столбцы идентификаторов поддерживаются во многих базах данных, таких как MySQL, DB2, SQL Server, Sybase и PostgreSQL.Oracle не поддерживает столбцы IDENTITY, но их можно имитировать с использованием объектов последовательности и триггеров.
Если вы хотите быть независимым от вашего типа db, я рекомендую вам использовать «таблицу стратегии» в jpa.
см. Java Persistence/Identity and Sequencing для деталей.
вы спросили:
Я хотел бы знать, если это возможно, чтобы создать триггер, который будет магазин переменная номер (идентификатор) на стороне базы данных, а также увеличить его каждый раз, когда я вкладышем новой строки в db.
Да, вы можете использовать триггер, но, как я уже упоминал, есть несколько более простых решений, а не просто.
Также должна быть возможность обнажить с тем, что некоторые строки могут быть удалены , но won'shouldn't влияют на что-нибудь
в JPA растворах удаленные идентификаторы что не используется в следующем но если вы реализуете свое собственное решение, вы можете их использовать.
Надеюсь, этот ответ поможет вам.
Посмотрите колонки 'identity' для Sybase. –