为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate @OneToMany 映射 - 删除记录的问题

Hibernate @OneToMany 映射 - 删除记录的问题

Helenr 2021-07-16 12:09:10
在我的应用程序中,我想将应用程序中的所有图像放在一张表中。我上次发布了一个问题,有人建议我使用unidirectional @OneToMany。我有以下与Image实体关联的实体@Entity@Table(name="promotion")public class Promotion {    @Id    @Column(name="id")    protected String id;    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)    @JoinColumn(name="itemId")    protected List<Image> images = new ArrayList<>(); }@Entity@Table(name="product")public class Product {    @Id    @Column(name="id")    protected String id;    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)    @JoinColumn(name="itemId")    protected List<Image> images = new ArrayList<>(); }@Entity@Table(name="image")public class Image{    @Id    @Column(name="id")    private String id = IdGenerator.createId();    @Column(name="itemId")    private String itemId;    @Column(name="title", nullable = false)    protected String title;    @Column(name="filename", nullable = false)    protected String filename;    @Column(name="path", unique = true)    private String path;    @Column(nullable = true)    protected int width;    @Column(nullable = true)    protected int height;}我现在面临的问题是:A) 当我cascade={CascadeType.PERSIST, CascadeType.MERGE}在图像 ArrayList属性上使用时,出现此异常:org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1所以我用它替换了它,cascade=CascadeType.ALL当我保存Product或Promotion相关的Image(s)也被保存时,这很酷,这就是我想要的B) 我现在遇到的主要问题是当我删除 aProduct或 时Promotion,其关联的图像永远不会被删除。它们的关联图像保留在图像表中。通过使用cascade=CascadeType.ALL我希望当我删除 aProduct或 a 时Promotion,它的图像也应该被自动删除。我试图从数据库中删除一个图像,如果它会触发它的关联Product或被Promotion删除,但它没有,因为我认为它是单向的,这是有道理的。但是为什么当我删除 aProduct或其Promotion关联的图像时不会被删除
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信