Автоинкремент идентификатор гибернации


У меня есть приложение j2ee, использующее hibernate с аннотацией. Как я могу аннотировать поле Id в моем классе pojo, чтобы установить его как автоматическое увеличение или автоматическое создание. и при добавлении Боба я оставляю это поле в своем Бобе null?

5 71

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