Как инициализировать сложный тип в спящем объекте - PullRequest
0 голосов
/ 06 февраля 2020

Член моего класса имеет байт типа. Как вы знаете, его начальное значение будет NULL. Но я хочу, чтобы оно было 0, если никто не вызывает конструктор по умолчанию. Так будет ли способ, которым я это делаю, быть правильным? Потому что в моей базе данных это значение не может быть NULL. Поэтому мне нужно дать ему значение, которое по умолчанию должно быть 0.

@Entity
@Table(name = "Holiday")
public class Holiday {

   @Column(columnDefinition = "Bit(2)")
   private Byte approved = (byte) 0;

   public Holiday() {
   }

   public Holiday( Byte approved) {
      super();
      this.approved = approved;
   }

PS: Конечно, в этом классе гораздо больше членов, а также еще один конструктор. Но для демонстрации я удалил всех остальных участников.

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Так что, как я это сделаю, так и будет?

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

@Entity
@Table(name = "Holiday")
public class Holiday {

   @Column(columnDefinition = "Bit(2)")
   private Byte approved;

   public Holiday() {
      this.approved = 0;
      // other default initialization
   }

   public Holiday(Byte approved) {
      this();
      this.approved = approved;
   }
   // ...
}
0 голосов
/ 06 февраля 2020

Попробуйте добавить nullable = false :

    @Entity
    @Table(name = "Holiday")
    public class Holiday {

        @Column(columnDefinition = "Bit(2)", nullable = false)
        private Byte approved = (byte) 0;

        public Holiday() {
        }

        public Holiday( Byte approved) {
            super();
            this.approved = approved;
        }

Или добавить в столбец Определение НЕ НЕДОСТУПНО ПО УМОЛЧАНИЮ 0

 @Column(columnDefinition = "Bit(2) NOT NULL DEFAULT 0")
0 голосов
/ 06 февраля 2020

Поскольку вы уже используете columnDefinition, вы можете определить значение по умолчанию:

columnDefinition = "Bit(2) NOT NULL DEFAULT 0". Это установит ограничение на уровне базы данных при отклонении значений NULL.

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

...