获取实体子类而不使用instanceOf

3
我有一个场景,在hibernate中实现了一个实体层次结构。它的继承类型是InheritanceType.JOINED。
父类:
@Entity 
@Table(name = "LOY") 
@Inheritance(strategy=InheritanceType.JOINED)
public class Loy implements Serializable 

子类边界
@Entity 
@Table(name = "LOY_BOUNDARY") 
@PrimaryKeyJoinColumn(name="ID")
public class LoyBoundary implements Serializable 

子类百分比
@Entity 
@Table(name = "LOY_PERCENTAGE") 
@PrimaryKeyJoinColumn(name="ID")
public class LoyPercentage implements Serializable 

我有一个客户实体类,它与Loy实体类通过@ManyToOne进行关联。 每个客户只能同时与一个Loy关联。
我想要实现的是,我想使用唯一ID(护照号)查询客户类,然后通过客户实体中的@ManyToOne映射 获取特定客户的Loy
我遇到的问题是我不知道哪个Loy子类与客户相关联。
  1. 我可以使用instanceOf来获取特定子类,但我希望尝试避免这种方法。
  2. 我还可以在子类实体中添加访问者模式,但不确定这是否是最佳实践。

但是客户究竟想用Loy做什么? - chris
@chris Loy 包含客户未来需要使用的字段/列,但是这些字段/列对于每个 Loy 的子类都是不同的。 - Rentius2407
1个回答

1

我会选择使用访问者模式。如果ManyToOne是延迟加载的,那么使用instanceof将不起作用,因为Loy的实际类型不会是您的任何子类,而是扩展Loy类的Hibernate代理。事实上,Hibernate无法从客户端中Loy的ID知道它所指的Loy类型。

而且,访问者模式更加面向对象和清晰。


谢谢您的回复。我也偶然发现了一篇关于在hibernate中使用访问者模式的文章:这是链接。对我来说,这听起来像是正确的答案,但我想从社区获得更多意见。 - Rentius2407

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接