weixin_42297864 2008-11-08 12:10
浏览 389
已采纳

JPA中在OneToMany中引用子类时出现的问题--再贴一次

呵呵,在这里http://www.iteye.com/problems/6486已经有过讨论了,但soartju兄弟一句"很全面了"导致了无人跟贴,哈哈,只好再贴一次,顺谢jones和soartju两位兄弟.
问题:当Client采用OnToMany关联到Sub1时,如果被关联方(Sub1)是Super的子类(单表策略),就无法通过client.getSub1()方法获取到正确的结果(最终获得的结果相当于client.getSuper(),即将全部super对象返回了,而不是返回对应的sub1对象).
但:[quote][/quote]所有的sub1dao方法都返回了正确的结果.
例举如下:

1)超类:
@Entity
@Table(name="person")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=50)
public class Person {}
2)子类:
@Entity
@DiscriminatorValue(value="SellerLeader")
public class SellerLeader extends Person {
/**

  • 所属经销商
  • @return 所属经销商 / @ManyToOne @JoinColumn(name = "dealer_id", referencedColumnName = "id") public Seller getSeller() { return seller; } } 3)客户类: @Entity @Table(name="seller") public class Seller extends Dealer { /*
  • 上级经销商
  • @return */ @ManyToMany @JoinTable(name="distributor_seller", joinColumns=@JoinColumn(name="seller_id", referencedColumnName="id"), inverseJoinColumns=@JoinColumn(name="distributor_id", referencedColumnName="id")) public Set getDistributors() { return distributors; } } 4)测试(由于是单表策略,person表共6条记录,其中SellerLeader有4条): Seller seller = sellerDao.get(-2L); Assert.assertEquals(4, seller.getLeaders().size());//注意:测试失败,告知说有6条而不是4条. Assert.assertEquals(4, sellerLeaderDao.getAll().size());//测试成功,说有4条. 5)另外,所有的sellerLeaderDao方法都是成功的,也就是说多态本身是没有问题的,就是在ontomany关系中使用多态出问题了. [b]问题补充:[/b] to jones: 呵呵,子类代码贴错了,更改如下: @Entity @Table(name="seller") public class Seller extends Dealer { private Set leaders; @OneToMany(cascade = CascadeType.ALL, mappedBy="seller") public Set getLeaders() { return leaders; } } [b]问题补充:[/b] 再晕,Seller是客户类,不是子类. [b]问题补充:[/b] Dealer @MappedSuperclass public abstract class Dealer { private String address; ....(没有相关内容) } [b]问题补充:[/b] 太感谢了! 就是它:@ForceDiscriminator.呵呵,居然不属于JPA规范.
  • 写回答

5条回答 默认 最新

查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波