我正在尝试为一个属性设置一个默认值,当我在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
提前感谢您的反馈。
答案 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"