【发布时间】:2018-07-06 21:14:13
【问题描述】:
当我在 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(); } }
当我查看日志时,我可以看到数据库是使用属性 company 的默认值创建的。
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
提前感谢您的反馈。
【问题讨论】:
标签: spring-data spring-data-jpa jpa-2.0 h2