我想在一个独立实体上调用save()时要替换一个人的关系,但它只会添加新事件并且不会删除旧事件(我不删除旧事件想从数据库加载实体)。
是否有一个设置可以清除关系而不加载/附加实体?
我正在使用spring-data-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;
}
dao
public interface StuffDao extends JpaRepository<Stuff, Long> {}
谢谢您的帮助。
我找到了解决方案!我不得不添加孤儿。
@OneToMany(mappedBy = "stuff", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
这很奇怪,因为我总是cascade.emove包含在cascade中。
无论如何,我现在可以将一个实体保存在独立状态并替换其关系。
谢谢大家