繁体   English   中英

默认列值在休眠中不起作用

[英]Default Column value is not working in hibernate

我使用注释在Ben中设置“ firm_name”默认值。 但是,当我插入数据时,它将在数据库中添加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)

您编写的代码不是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";

每当要插入实体时,Hibernate都会生成以下DML:

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

在您的Java代码中,您只是没有为firm_name设置值,所以属性为null

是否使用该列的默认值将取决于您使用的数据库平台以及在这种情况下它如何解释NULL

例如,MySQL将看到Hibernate将firm_name绑定为NULL ,因此将为您应用默认值,而不是将列设置为NULL

例如,SQL Server将看到INSERT语句在column部分中包含字段firm_name ,因此将忽略默认值,并使用values部分中提供的任何值,因此该列将设置为NULL SQL Server使用默认值的唯一方法是,如果在插入语句的“列”部分中省略了该列。

无论您使用哪种数据库平台,确保设置默认值的唯一方法是确保您的实体状态也遵守该规则。 这意味着您需要使用字段定义,类的构造函数或构造实体的业务逻辑中的默认值来初始化firm_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM