gpt4 book ai didi

spring-data - H2 Spring-Data - 默认值不起作用

转载 作者:行者123 更新时间:2023-12-04 17:46:08 27 4
gpt4 key购买 nike

当我在 H2 数据库中持久化一个没有该属性值的对象时,我试图为一个属性设置一个默认值。

即使实体声明正确,默认值也不会保留。

我想知道为什么以及如何解决它,我在下面的代码中隔离了问题:

  • 应用程序属性

    spring.h2.console.enabled=true
    spring.h2.console.path=/h2
    spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
    spring.datasource.username=sa
    spring.datasource.password=
    spring.jpa.generate-ddl=true
    spring.jpa.show-sql=false
  • 实体

    package com.h2.H2POC;

    import org.hibernate.annotations.ColumnDefault;

    import javax.persistence.*;
    @Entity
    @Table(name = "car")
    public class Car {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "company")
    @ColumnDefault(value = "'Toyota'")
    private String company;

    @Override
    public String toString() {
    return "Car{" +
    "id=" + id +
    ", company='" + company + '\'' +
    '}';
    }

    public Long getId() {
    return id;
    }

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

    public String getCompany() {
    return company;
    }

    public void setCompany(String company) {
    this.company = company;
    }
    }
  • 服务

     @Service
    public class CarService {

    @Autowired
    private CarRepository repository;

    @PostConstruct
    public void init(){
    Car car = new Car();
    repository.save(car);
    }

    public List<Car> getCar (){
    return repository.findAll();
    }
    }

当我查看日志时,我可以看到数据库是使用属性公司的默认值创建的。

    14:26:03.087 [main] DEBUG org.hibernate.SQL - drop table car if exists
14:26:03.087 [main] DEBUG org.hibernate.SQL - create table car (id bigint generated by default as identity, company varchar(255) default 'Toyota', primary key (id))

此示例使用这些依赖项:

    <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

主要依赖的版本是:

   spring-data-jpa:1.11.9.jar
com.h2database:1.4.196.jar

提前感谢您的反馈。

最佳答案

@Column(name = "company")
@ColumnDefault(value = "'Toyota'")
private String company;

这是您所说的默认值吗?如果是,这不是您添加默认值的方式。你可以简单地做到这一点。

private String company = "Toyota";

也就是说,如果这就是您想要做的。这可能有效。但有些人会这样做:

@Column(name = “myColumn”, nullable = false, columnDefinition = “text default Toyota")

至于 columnDefinition = “text default Toyota” 部分,我不太确定你是不是这样写的。它可能是 columnDefinition = “String default Toyota”

关于spring-data - H2 Spring-Data - 默认值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com