我有一个问题,我几天都无法解决。我已经阅读了许多文档,在许多论坛上进行了搜索,但没有找到解决方案。
我继承了类,如下代码所示:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "nc_linktype", discriminatorType = DiscriminatorType.STRING)
@Table(name = "mk_newsletter_coupons")
@DiscriminatorOptions(force = true)
public class BaseNewsletterCoupon extends BaseEntity {...}
@Entity
@DiscriminatorValue("expire")
public class NewsletterCouponsExpire extends BaseNewsletterCoupon {
@Entity
@DiscriminatorValue("region")
public class NewsletterCouponsRegion extends BaseNewsletterCoupon {
我想在OneToMany领域的许多方面使用这些特定的实体:
@Entity(name = "newsletter")
@Table(name = "mk_newsletters")
@Configurable
public class NewsLetter extends BasePictureEntity {
@OneToMany(mappedBy = "newsletter", cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY)
@IndexColumn(name = "nc_index")
@OrderColumn(name = "nc_index")
@OrderBy("index")
List<NewsletterCouponsExpire> expireCoupons = new ArrayList<NewsletterCouponsExpire>();
@OneToMany(mappedBy = "newsletter", cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY)
@IndexColumn(name = "nc_index")
@OrderColumn(name = "nc_index")
@OrderBy("index")
List<NewsletterCouponsRegion> regionCoupons = new ArrayList<NewsletterCouponsRegion>();
当我坚持使用此新闻通讯实体时,所有记录都会很好地创建。
如果我修改列表的内容,则orphanRemoval = true属性似乎无效,因为旧记录保留在表中,而新记录被创建。
如果我从基本实体中删除@DiscriminatorOptions批注,则会删除旧记录,但是继承标识符不再起作用,因此JPA提供程序(休眠)会尝试将每个子记录加载到每个集合中,从而导致组织.hibernate.loader.Loader.instanceAlreadyLoaded异常。
是否有人成功实现了这样的模型,或者知道此问题的任何解决方法?
最佳答案
您可以尝试将Hibernate的本机@Cascade批注与级联删除孤儿一起使用,而不是使用JPA的孤儿删除。
有机会起作用。
让我知道它是否对您有用。