有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在实体Spring JPA中保存列表项

我想在配置实体中保存项目列表。但是,当模型的addItem()函数被调用时,就会发生这种情况。getItems()将为NULL。我不明白为什么。。。在同一请求中保存对象及其项的最佳方法是什么

配置。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);
    }
}

ConfigurationServiceImpl。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);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    由于@SuperBuilder注释,您的列表被指定为null,因为如果未使用@Builder注释,它将忽略初始化值。默认值如下所示

    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);
        }
    }