[英]Saving list items in Entity Spring JPA
我想在配置实体中保存项目列表。 但是当模型的addItem() function 被调用时, this.getItems ()将是NULL 。 我不明白为什么......保存 object 的最佳方法是什么?它的项目在同一个请求中?
配置.java
@Entity
@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
public class Configuration extends BaseEntity{
@ManyToOne
private CarModel carModel;
@ManyToOne
private Country country;
@OneToMany(fetch = FetchType.LAZY)
private List<EquipmentItem> items = new ArrayList<>();
public void addItem(EquipmentItem equipmentItem){
this.getItems().add(equipmentItem);
}
}
配置ServiceImpl.java
@Component
public class ConfigurationServiceImpl implements ConfigurationService{
@Autowired
private ConfigurationRepository configurationRepository;
@Autowired
private EquipmentItemRepository equipmentItemRepository;
@Override
public ConfigurationDTO save(ConfigurationDTO configurationDTO) {
Configuration configuration = Configuration.builder()
.name(configurationDTO.getName())
.build();
for (EquipmentItemDTO item: configurationDTO.getItems()) {
configuration.addItem(equipmentItemRepository.findById(item.getId())
.orElseThrow(EntityNotFoundException::new));
}
configurationRepository.save(configuration);
return DTOConverter.convertConfiguration(configuration);
}
}
由于 @SuperBuilder 注释,您的列表被分配给 null,因为如果它没有使用 @Builder.Default 注释,它将忽略初始化值,如下所示
Entity
@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
public class Configuration extends BaseEntity{
@ManyToOne
private CarModel carModel;
@ManyToOne
private Country country;
@Builder.Default
@OneToMany(fetch = FetchType.LAZY)
private List<EquipmentItem> items = new ArrayList<>();
public void addItem(EquipmentItem equipmentItem){
this.getItems().add(equipmentItem);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.