繁体   English   中英

在实体 Spring JPA 中保存列表项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM