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

时间:2018-01-27 19:44:04

标签: spring-data spring-data-jpa jpa-2.0 h2

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

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

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

  • application.properties

    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

提前感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

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