Java, как установить атрибут автоматического приращения - PullRequest
0 голосов
/ 01 ноября 2018

В моей организации у меня есть этот код:

@Entity
@Table(name = "product")
class Product{   
...
    @GeneratedValue(strategy=GenerationType.AUTO)
    int rank;
}

Когда я пытаюсь сохранить объект типа product, в БД значение ранга остается всегда 0

Могу ли я установить атрибут, отличный от автоинкремента id?

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Следующее должно работать, и если это не так, попробуйте, что будет после:

@Entity
@Table(name = "product")
class Product{   
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int rank;
}

public int getId() {
    return id;
}



public void setId(int id) {
    this.id = id;
}

Если это не сработает, перейдите в базу данных и установите переменную ранга для автоматического увеличения.

0 голосов
/ 01 ноября 2018

Решение, предложенное @Alain Cruz, это путь! Но это половина ответа ... Вам понадобится:

1) Чтобы изменить свой атрибут rank следующим образом:

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
Long rank;

2) Создайте триггер перед вставкой, который отслеживает Products сущности, проверяя, что если ранжирование приходит null, вы измените это значение на новое значение, возвращаемое желаемой последовательностью ...

Я использовал этот подход для генерации специальных кодов с использованием функций SQL, хранящихся в моей базе данных ... Вы можете найти более подробную информацию здесь

0 голосов
/ 01 ноября 2018

Существуют разные способы автоматического создания значения, но они всегда должны выполняться в поле @Id. Если оно не объявлено, вы не сможете автоматически увеличить свое значение.

Существуют различные типы стратегий для увеличения вашего идентификатора. В этом блоге вы можете узнать о них больше. Для вашего примера, IDENTITY должна помочь.

@Entity
@Table(name = "product")
class Product{   

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int rank;
}

Обновление

После некоторых исследований кажется, что Hibernate теперь позволяет автоматически увеличивать другие поля без идентификатора, но для этой цели он использует другую аннотацию. Я не пробовал это, но возможно это могло бы работать. Это в случае, если ваш ранг не ваш идентификатор.

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
int rank;
0 голосов
/ 01 ноября 2018
@Entity
@Table(name = "product")
class Product{   
...
    @GeneratedValue(strategy=GenerationType.IDENTITY )
    int rank;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...