Установить значения по умолчанию, используя аннотации в спящем режиме в MYSQL

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

@Column(name = "COLUMN_NAME", insertable=false, updatable = false, nullable = false, columnDefinition = "int default 1")
protected Integer test_id;

и работает нормально.

Но у меня нетЯ не видел ни одного примера для типа данных varchar / string, и я пробовал с различными типами в columnDefinition, как,

columnDefinition = "TEXT default `TEST`"  
columnDefinition = "TEXT default TEST"  
columnDefinition = "varchar(255) default `15-JUL-1980`")  
columnDefinition = "varchar(255) default 15-JUL-1980")  
columnDefinition = "varchar default 15-JUL-1980")  
columnDefinition = "varchar default `15-JUL-1980`")  
columnDefinition = "CHAR(100) default `15JUL1980`")  
columnDefinition = "CHAR default `15JUL1980`")

С атрибутом длины: -

`length=100, columnDefinition = "CHAR default `15JUL1980`")` 

и т.п.

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

 Alex26 окт. 2012 г., 10:04
Для существующей таблицы и новой вставки / обновления вы можете напрямую установить значение по умолчанию в Java, как это@Column(.., columnDefinition = "varchar(255) default '15-JUL-1980'") private String myVar = "15-JUL-1980";, Когда Hibernate создаст новый экземпляр, для переменной уже будет установлено значение по умолчанию.
 Alex25 окт. 2012 г., 16:30
окружать15-JUL-1980 в кавычках, какcolumnDefinition = "varchar(255) default '15-JUL-1980'", Кроме того, это должно помочь вам:stackoverflow.com/questions/197045/...
 Tulshiram Pawde25 окт. 2012 г., 17:53
Спасибо Алекс и твое право. На самом деле я менял существующую таблицу с изменением класса сущности, но этоs работает после допинга существующей таблицы и позволяет hibernate создать новую таблицу. После удаления таблицы и нового запуска приложение работает с [@Column (name = "CNAME», вставляемый = ложь, обновляемый = ложный, nullable = ложный, columnDefinition = "varchar (255) default '15-JUL-1980»)] хорошо.
 Tulshiram Pawde26 окт. 2012 г., 09:59
Это работает только с новой таблицей, но есть ли идея применить изменения к существующей таблице.

Ответы на вопрос(2)

Параметр columnDefinition работает, но зависит от базы данных.

и есть много других решений (Использование аннотации @PrePersist, изменение 'добытчики), но я рекомендую установить значение по умолчанию в СУБД, а затем использовать аннотации @ DynamicInsert / @ DynamicUpdate в классе модели.



Смотрите пример ниже (Spring data JPA + Hibernate).

// Model class
@Entity
public class Person {
    private Integer age;
    private String name;
    private String phone;
    private String address;

    // setters and getters
}

// Insert method in service class
@Override
@Transactional
public Person create() {
    Person createdPerson = new Person();

    createdPerson.setAge(20);
    createdPerson.setName("Foo");
    //createdPerson.setPhone("Unknown");
    //createdPerson.setAddress("Somewhere");

    return personRepository.save(createdPerson);
}

Hibernate сгенерирует следующую инструкцию вставки SQL.

INSERT INTO person (age, name, phone, address)
VALUES (?, ?, ?, ?)

Вы также можете увидеть ненужные столбцы Hibernate (телефон, адрес), тоже.

но после добавления аннотации @DynamicInsert в класс Model, как показано ниже,

@Entity
@DynamicInsert
public class Person {
    ...
}

Вы можете видеть Hibernate вставить только необходимые столбцы.

INSERT INTO person (age, name)
VALUES (?, ?)

а неинициализированные столбцы (телефон, адрес) устанавливают свои значения по умолчанию для СУБД.

 Tulshiram Pawde23 дек. 2015 г., 06:28
Спасибо.! Было приятно узнать о аннотации DynamicInsert

Ниже строка кода работает нормально

@Column(name = "cname", insertable=false, updatable = false, nullable = false, columnDefinition = "varchar(255) default '15-JUL-1980'") 

Ваш ответ на вопрос