Автоинкремент идентификатор гибернации
У меня есть приложение j2ee, использующее hibernate с аннотацией. Как я могу аннотировать поле Id в моем классе pojo, чтобы установить его как автоматическое увеличение или автоматическое создание. и при добавлении Боба я оставляю это поле в своем Бобе null?
5 ответов:
@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;
а ты оставь его
null
(0
) при сохранении. (null
Если вы используетеInteger
/Long
фантики)в некоторых случаях
AUTO
стратегия разрешена кSEQUENCE
Ратен, чемIDENTITY
илиTABLE
, так что вы можете вручную установить его вIDENTITY
илиTABLE
(в зависимости от базы данных).кажется
SEQUENCE
+ указание имени последовательности работал на вас.
сделать это следующим образом :-
@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }
вы можете использовать любое произвольное имя вместо kaugen. Он работал хорошо, я мог видеть ниже запросы на консоли
Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
Hibernate определяет пять типов стратегий генерации идентификаторов:
авто - либо столбец идентификаторов, последовательность или таблица в зависимости от базовой БД
стол - таблица с ID
личность - столбец Identity
последовательность - последовательность
личность копия – идентификатор копируется из другого объекта
пример использования Таблица
@Id @GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator") @TableGenerator(name="employee_generator", table="pk_table", pkColumnName="name", valueColumnName="value", allocationSize=100) @Column(name="employee_id") private Long employeeId;
для более подробной информации, проверьте ссылке.
FYI
С помощью netbeansновые классы сущностей из базы данных С mysql *auto_increment* столбец, создает атрибут со следующими аннотациями:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
Это давало мне ту же ошибку, говоря, что столбец не должен быть null, поэтому я просто удалил @NotNull anotation, оставив атрибут null, и он работает!
Если у вас есть числовой столбец, который вы хотите автоматически увеличить, это может быть опция для установки
columnDefinition
напрямую. Это имеет то преимущество, что схема автоматически генерирует значение, даже если оно используется без спящего режима. Это может сделать ваш код БД-разному:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql