有 Java 编程相关的问题?

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

java如何保存分离的实体并替换一对多关系的内容?

在对分离的实体调用save()时,我想替换一对多关系的内容,但它只添加新的实例,而不删除旧的实例(我不想从数据库中加载实体)

是否有在不加载/附加实体的情况下清除关系的设置

我使用的是spring数据jpa

这是我的服务:

@Component
@Transactional
public class StuffService {
    @Autowired
    StuffDao stuffDao;

    public void save(StuffDto stuffDto) {
        // The converter maps the properties into the entity, id included
        Stuff stuff= stuffConverter.dtoToBo(stuffDto);
        stuffDao.save(stuff);
    }
}

Dtos

public class StuffDto {
    private Long id;

    @NotNull(message = "products-empty")
    @Valid
    private List<ProductStuffDto> products;
}

public class ProductStuffDto {
    Integer order;

    String name;
}

实体

@Entity
public class Stuff {

    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "stuff", cascade = CascadeType.ALL)
    private List<ProductStuff> products;
}

@Entity
public class ProductStuff {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "stuff_id", nullable = false)
    private Stuff stuff;

    Integer order;

    String name;
}

public interface StuffDao extends JpaRepository<Stuff, Long> {}

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    我找到了解决办法! 我不得不加上孤儿搬迁

    @OneToMany(mappedBy = "stuff", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    

    这很奇怪,因为我一直认为瀑布。移除Cascade中包含的内容。都有同样的效果

    无论如何,我现在可以在分离状态下保存实体并替换其关系

    谢谢大家