toc*_*csa 5 hibernate jpa one-to-many single-table-inheritance discriminator
我有一个问题,我现在好几天都无法解决。我阅读了很多文档,搜索了很多论坛,但没有找到解决方案。我继承了类,如下所示:
@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 {
Run Code Online (Sandbox Code Playgroud)
我想在 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>();
Run Code Online (Sandbox Code Playgroud)
当我坚持这个时事通讯实体时,所有记录都很好地创建。如果我修改列表的内容,似乎 orphanRemoval = true 属性不起作用,因为旧记录保留在表中,并且会创建新记录。如果我从基本实体中删除 @DiscriminatorOptions 注释,旧记录将被删除,但继承鉴别器不再起作用,因此 JPA 提供程序(休眠)尝试将每个子记录加载到每个集合中,这会导致一个组织.hibernate.loader.Loader.instanceAlreadyLoaded 异常。
有没有人成功实现过这样的模型,或者知道这个问题的任何解决方法?
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |