当前位置: 首页 > 知识库问答 >
问题:

在MYSQL中使用Hibernate注释设置默认值

微生烨然
2023-03-14

我在互联网上搜索过,看到了关于在mysql中使用Hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为具有数据类型整数的列,如下所示。

@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`")` 

等等。

但在这种情况下,表不是由hibernate创建的,这可能是由于语法错误。但如果我创建的表只包含整数值,则会创建上面的表。

共有3个答案

谢洛城
2023-03-14

只需在您的Java代码中设置默认值,就像这样初始化您的变量-Private int myColVIII=100;和String as

@Column(name="order_status" , length=10 )
private String orderStatus = "Pending";

这是我的工作!!我知道现在已经太晚了,但我希望这能帮助别人!!

汤承允
2023-03-14

columnDefinition可以工作,但它依赖于数据库
还有许多其他解决方案(使用@PrePersist annotation,修改“getters”),但我建议您在DBMS中设置默认值,然后在模型类中使用@DynamicInsert/@DynamicCupDate注释参见下面的示例(Spring数据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将生成以下insert SQL语句。

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

您也可以看到Hibernate插入不必要的列(电话、地址)。

但是,在像下面这样向Model类添加@Dynamic插入注释之后,

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

您可以看到Hibernate只插入必要的列。

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

和未初始化的列(电话、地址)通过DBMS默认值设置其值。

淳于升
2023-03-14

下面的代码行工作正常

@Column(name = "cname", insertable=false, updatable = false, nullable = false, columnDefinition = "varchar(255) default '15-JUL-1980'") 
 类似资料:
  • 我知道DateTimeFormat注释可以在Spring中的模型类的日期属性上定义,但是有没有任何方法可以为Spring模型类中的所有日期定义一个默认的DateTimeFormat注释呢? @DateTimeFormat(pattern=“MM/DD/YYYY”) 私人日期DeliveryDate; 它将使我不必对每个日期字段进行注释。它还将使我更容易更改应用程序宽日期格式以后。

  • 问题内容: 我知道SO和网络上都有很多这些问题,但是所有答案都建议使用特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。 我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。 所以我的问题是:有谁知道我该如何定义带注释

  • 问题内容: 我的下拉列表中有很多选项,例如: 我需要选择在标签中有价值 的是我自己的 选项,而不是按属性。 我该如何使用jQuery? 问题答案: 如果您想为此使用jQuery,请尝试以下代码。 更新: 在Vivek发表评论后,正确指出了steven spielberg想通过其Text值选择该选项。 下面是更新的代码。 您需要使用选择器通过包含的文本进行查找。 当获取和设置属性时,jQuery p

  • 问题内容: 如何创建以下注释的实例(所有字段均设置为其默认值)。 我试过了,但这似乎不起作用… 问题答案: 您无法创建实例,但至少要获取默认值 然后,可以使用动态代理返回默认值。据我所知,这也是Java本身处理批注的方式。

  • 我在表中为某些列设置了默认值。例如,create_time我已经设置了CURRENT_TIMESTAMP。当我通过JPA插入一个对象时,我没有得到该列的默认值。是否有任何命令可以执行此操作?

  • 问题内容: 我的实体中有一个布尔型属性。这是我的注释: 但是效果并不理想。这是我作为生成表的结果得到的SQL代码: 我究竟做错了什么? 因此,当我尝试将此类的实例保存到数据库时,出现异常: 如果我删除财产: 因此在这种情况下,我可以保存创建的对象。但是仍然 没有设置默认值, 并且我在数据库中此字段的值中得到NULL。 有什么想法吗?如果重要,我会使用MySQL Server 5.1。我将非常感谢您