Идентификатор автоинкремента Hibernate

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

Ответ 1

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

и вы оставите его null (0) при сохранении. (null, если вы используете обертки Integer/Long)

В некоторых случаях стратегия AUTO разрешена до SEQUENCE rathen, чем до IDENTITY или TABLE, поэтому вы можете вручную установить ее на IDENTITY или TABLE (в зависимости от базовой базы данных).

Кажется, что SEQUENCE + , указав имя последовательности для вас.

Ответ 2

Сделайте это следующим образом: -

@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 (?, ?, ?, ?, ?)

Ответ 3

Hibernate определяет пять типов стратегий генерации идентификаторов:

АВТО - либо столбец идентификатора, последовательность или таблица в зависимости от базовой БД

ТАБЛИЦА - таблица с идентификатором

ИДЕНТИФИКАЦИЯ - столбец идентификаторов

ПОСЛЕДОВАТЕЛЬНОСТЬ - последовательность

копия идентичности - личность копируется из другого объекта

Пример с использованием таблицы

@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;

для более подробной информации, проверьте ссылку .

Ответ 4

FYI

Используя netbeans Новые классы Entity из базы данных с столбцом mysql * auto_increment *, создайте вам атрибут со следующими аннотациями:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;

Это привело меня к той же ошибке, что столбец не должен быть нулевым, поэтому я просто удалил анонимность @NotNull, оставив атрибут null, и он работает!

Ответ 5

Если у вас есть числовой столбец, который вы хотите автоматически увеличивать, возможно, это будет возможность напрямую установить columnDefinition. Это имеет то преимущество, что схема автоматически генерирует значение, даже если оно используется без спящего режима. Это может сделать ваш код db-специфичным, хотя:

import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql

Ответ 6

В случае, если кто-то "столкнется" с этим вопросом SO в поиске стратегий для таблицы Informix, когда PK имеет тип Serial.

Я обнаружил, что это работает... как пример.

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "special_serial_pk")
private Integer special_serial_pk;

Чтобы это работало, убедитесь, что при выполнении session.SaveOrUpdate вы передаете значение для столбца special_serial_pk NULL.

В моем случае я делаю POST HTML с JSON, как...

{
"special_serial_pk": null, //<-- Field to be incremented
"specialcolumn1": 1,
"specialcolumn2": "I love to code",
"specialcolumn3": true
}

Ответ 7

Используя netbeans, новые классы сущностей из базы данных со столбцом mysql auto_increment, создает атрибут со следующим hibernate.hbm.xml: id - это автоинкремент