我想从API检索一些信息并将其插入数据库。 我会不时提出相同的要求,如果需要,我想更新现有行并插入新行。作为例外,我有一个名为STATUS 的列-不包含在api-中,我不希望通过api请求更新此列,我将使用自己的应用程序更改状态。 我正在尝试使用@DynamicUpdate,但是以某种方式它会保留null值。 注意:我还试图将状态设置为0(被动)作为默认值。
我有一个DTO和相应的休眠实体,如下所示。
@Getter
@Setter
public class CountryDto {
private String name;
private String code;
}
ENTITY
@Getter
@Setter
@Entity
@DynamicUpdate
@DynamicInsert
@Table(name = "Country")
public class Country{
@Id
@Column(name = "code", length=8)
private String code;
@Column(name = "name")
private String name;
//I Would like to instert PASSIVE as default status
@Column(name = "status", columnDefinition = "int(11) default 0")
private Status status;
}
控制器
@GetMapping("/getCountries")
public void getCountryRemote() {
List<CountryDto> countries = aPCService.getCountries();
persistCountries(mapper.countryDtoToCountryEntity(countries));
}
private void persistCountries(List<Country> countries) {
countries.forEach((Country country)->{
countryRepository.save(country);
});
}
当我第一次运行代码时,它插入日期,我得到以下sql。这就是我想要的,它跳过状态列,因为它为空,并且数据库中的 STATUS列设置为0。
insert
into
country
(name, code)
values
(?, ?)
当我第二次运行代码时,数据库中的所有状态列都设置为空。但是我不想改变他们的价值。下面是sql
Hibernate:
select
country0_.code as code1_0_0_,
country0_.name as name3_0_0_,
country0_.status as status4_0_0_
from
country country0_
where
country0_.code=?
Hibernate:
update
country
set
status=?
where
code=?
我期望休眠状态不会更新STATUS值,因为它为null,并且我正在使用@DynamicUpdate
谢谢