спящий режим auto_increment getter / setter - PullRequest
0 голосов
/ 27 октября 2010

У меня есть класс, который сопоставлен с таблицей, используя спящие нотации автоматического приращения. Этот класс работает нормально, когда я устанавливаю значения и обновляю их в базе данных, и я получаю правильное обновленное значение в таблице.

Но проблема в том, что когда я создаю новый объект этого класса и пытаюсь получить идентификатор, он возвращает мне 0 вместо идентификатора auto_incremented.

Код класса

@Entity(name="babies")
public class Baby implements DBHelper{

 private int babyID;


 @Id 
 @Column(name="babyID", unique=true, nullable= false)
 @GeneratedValue(strategy = GenerationType.AUTO)
 public int getBabyID() {
  return babyID;
 }
 public void setBabyID(int babyID) {
  this.babyID = babyID;
 }
}

Код, который я использую для получения постоянного значения:

Baby baby = new Baby (); System.out.println ("BABY ID =" + baby.getBabyID ());

Это возвращает мне

BABY ID = 0

Любые указатели приветствуются.

Спасибо, Сана.

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

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

1 голос
/ 27 октября 2010

Идентификатор устанавливается в спящем режиме, когда объект сохраняется и становится постоянным.

Аннотации только сообщают спящему, как он должен вести себя с классом, свойством, методом, к которому относится аннотация.

Еще одна вещь, если у вас есть текущее значение идентификатора, как в спящем режиме, сможет распознать, что он должен вставить или только обновить это значение.

Так что это нормальное ожидаемое поведение.

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