JPA: как сделать автоинкремент поля - PullRequest
4 голосов
/ 30 сентября 2010

Я использую Eclipselink в качестве провайдера JPA, как я могу сделать автоинкремент поля?

Ответы [ 4 ]

2 голосов
/ 02 декабря 2011

JPA 2.0 позволяет вам устанавливать auto_increment в поле без идентификатора, пока вы определяете столбец автоинкремента в вашей схеме - Hibernate / EclipseLink не сделает это за вас:

`non_id` bigint(20) DEFAULT NULL AUTO_INCREMENT,

и затем в вашей сущности:

 @Column(name = "non_id")
 @GeneratedValue
 public void setId(Long id) {
   this.id = id;
 }

сделает свое дело.

2 голосов
/ 30 сентября 2010

Я просто хочу автоинкрементное поле для 1 объекта.

Да, я понял, это то, что вы написали в своем вопросе. Но это может быть истолковано несколькими способами, и повторение одного и того же без разъяснений не сильно помогает:)

Так как работает Паскаль, или я должен сделать то, что предлагает Байт-код, запросить счетчик выбора (макс) + 1 из MyEntity, чтобы получить следующее значение, а затем установить его в поле дизайна, постоянное значение?

Если вы хотите увеличить поле для каждой записи сущности (например, «счетчик» для Order с id = 1, еще один для Order с id = 2), то я предложил бы работа.

Если вам нужно поведение, аналогичное первичному ключу (т. Е. Автоинкрементный столбец ), этого не произойдет. И в этом случае стандартный JPA не предлагает какой-либо конкретной функции (стандартный JPA допускает только GenereatedValue в Id аннотированном поле). Единственный способ, о котором я могу подумать, - это вставить другую выделенную сущность, чтобы получить от нее первичный ключ.


Точное требование неясно, но я предполагаю, что вы говорите о случайном поле, а не о первичном ключе. В этом случае вы можете использовать методы обратного вызова жизненного цикла:

@Entity
public class MyEntity {
    ...
    private int counter;
    ...

    @PrePersist
    @PreUpdate
    protected void increment() {
         counter = counter + 1;
    }
}
0 голосов
/ 02 октября 2010

Некоторые импланты JPA позволяют вам установить GeneratedValue на поле, является ли он PK или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...