java - 默认列值在 hibernate 中不起作用

标签 java hibernate hibernate-mapping

我使用注释在 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";

关于java - 默认列值在 hibernate 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50665490/

相关文章:

java - 我如何每 10 秒显示一个字符串中的一个随机单词?

java - 使用 JavaMail MessageIDTerm 获取消息的所有标签名称

java - 将 org.reSTLet.data.MediaType 转换为 com.google.common.net.MediaType

java - 在方法上注释的 Spring @Transactional 是否确保在方法结束时准确地刷新数据?

java - Hibernate删除和更新

java - Hibernate:如何配置通过Oracle包过程插入/更新/删除实体?

java - IntelliJ IDEA - 在 Java 文档注释中渲染 HTML 标记

java - hibernate/ Spring 数据 : Incorrect dirty check on field with AttributeConverter

java - 如何在使用大量记录时使用 Hibernate 更快地进行更新

java - 使用中间表(中间实体)与两个 ManyToOne 进行 JPA 映射