Значение столбца по умолчанию не работает в спящем режиме - PullRequest
0 голосов
/ 03 июня 2018

Я установил значение по умолчанию "firm_name" в Ben с помощью аннотации.Но когда я вставляю данные, он добавляет NULL в базу данных.Я хочу установить значение по умолчанию в базе данных, чтобы просто установить требуемые значения.
Другие значения столбца установлены в качестве значения по умолчанию, которое устанавливается в Bean.Ниже мой кодекс. Но он не работает.Я вставлю значение nNULL в базу данных.

@Entity
@Table(name = "my_leads")
public class My_leads{

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id")
    int id;

    @Column(name = "name", length = 100,columnDefinition = "varchar(255) default 'NA'")
    String name;

    @Column(name = "enrtyDate", insertable = false, updatable = false, nullable = false,columnDefinition = "datetime default NOW()")
    Date enrtyDate;

    @Column(name = "mobileNo", nullable = false, length = 100)
    String mobileNo;

    @Column(name = "firm_name", length = 100, nullable = false,columnDefinition = "varchar(255) default 'No Refrence'")
    String firm_name;


    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getEnrtyDate() {
        return enrtyDate;
    }

    public void setEnrtyDate(Date enrtyDate) {
        this.enrtyDate = enrtyDate;
    }

    public String getMobileNo() {
        return mobileNo;
    }

    public void setMobileNo(String mobileNo) {
        this.mobileNo = mobileNo;
    }


    public String getFirm_name() {
        return firm_name;
    }

    public void setFirm_name(String firm_name) {
        this.firm_name = firm_name;
    }

}


My_Leads lead=new My_Leads();
lead.setUser(1);
lead.setMobileNo("1234567896");
lead.setName("Sajan");
lead.setPriority(1);
lead.setStage(1);
lead.setCampain(1);
adminService.SaveLead(lead)

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Всякий раз, когда нужно вставить объект, Hibernate будет генерировать следующий DML:

INSERT 
  INTO my_leads (id, name, enrtyDate, mobilNo, firm_name)
VALUES (?, ?, ?, ?, ?)

В вашем Java-коде вы просто не устанавливаете значение для firm_name, так что свойствоnull.

Будет ли использоваться значение по умолчанию для столбца, будет зависеть от того, какую платформу базы данных вы используете и как она интерпретирует NULL в этом случае.

Например, MySQL увидит, что Hibernate ограничен NULL для firm_name, и поэтому применит для вас значение по умолчанию, а не установит столбец как NULL.

Например, SQL Server будетобратите внимание, что оператор INSERT содержит поле firm_name в разделе столбцов и поэтому будет игнорировать значение по умолчанию и использовать любое значение, указанное в разделе значений, поэтому для столбца будет установлено значение NULL.Единственный способ, которым SQL Server будет использовать значение по умолчанию, - это отсутствие столбца в разделе столбцов оператора вставки.

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

0 голосов
/ 03 июня 2018

Код, который вы написали, не является способом установки значения по умолчанию в Hibernate - он фактически предназначен для базы данных.

Когда вы создаете таблицу в базе данных, вы можете определить столбец таким образом, что если вы попытаетесьпри вставке нулевого значения вместо него будет вставлено значение по умолчанию.Это то, что вы сделали здесь varchar(255) default 'No Refrence'.

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

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

ALTER TABLE my_leads ALTER COLUMN firm_name SET DEFAULT 'No Refrence'

Если вы позволили Hibernate сгенерировать вашу схему и все еще имеете эту ошибку - убедитесь, что это фактически нулевые значения, а не NULL строки или что-то в этом роде.

Если вы не хотите вставлять значения по умолчанию для базы данных, а для Hibernate, сделайте это в своем классе @Entity:

String firm_name = "No Refrence";

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