У меня есть приложение j2ee, использующее спящий режим с аннотацией. Как мне аннотировать поле Id в моем классе pojo, чтобы установить его как автоматическое увеличение или автоматическое создание. и при добавлении bean-компонента я оставляю это поле в моем bean-компоненте null?
java
hibernate
auto-increment
Седрик
источник
источник
Сделайте это следующим образом: -
@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }
Вы можете использовать любое произвольное имя вместо кауген. Это сработало хорошо, я мог видеть ниже запросы на консоли
Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
источник
К вашему сведению
Использование netbeans новых классов сущностей из базы данных со столбцом mysql * auto_increment * создает вам атрибут со следующими аннотациями:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
Это вызывало у меня то же самое сообщение об ошибке, что столбец не должен быть нулевым, поэтому я просто удалил аннотацию @NotNull, оставив атрибут нулевым, и он работает!
источник
Hibernate определяет пять типов стратегий генерации идентификаторов:
АВТО - столбец идентичности, последовательность или таблица в зависимости от базовой БД
ТАБЛИЦА - таблица с идентификатором
ИДЕНТИЧНОСТЬ - столбец идентичности
SEQUENCE - последовательность
копия удостоверения - удостоверение копируется с другого объекта
Пример использования таблицы
@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;
подробности по ссылке .
источник
Если у вас есть числовой столбец, который вы хотите автоматически увеличивать, это может быть вариант, который можно установить
columnDefinition
напрямую. Это имеет то преимущество, что схема автоматически генерирует значение, даже если оно используется без спящего режима. Это может сделать ваш код специфичным для базы данных:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql
источник
На случай, если кто-то «наткнется» на этот вопрос 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 .
В моем случае я делаю HTML POST с JSON вот так ...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
источник
Использование netbeans новых классов сущностей из базы данных со столбцом mysql auto_increment создает вам атрибут со следующим hibernate.hbm.xml: id автоматически увеличивается
источник