У меня есть приложение j2ee, использующее hibernate с аннотацией. Как аннотировать поле Id в моем классе pojo, чтобы установить его как автоматическое приращение или автоматически сгенерированное. и добавляя bean, я оставляю это поле в моем bean null?
Идентификатор автоинкремента Hibernate
Ответ 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 - это автоинкремент