首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JPA组合模式实体

用JPA组合模式实体
EN

Stack Overflow用户
提问于 2018-01-04 17:28:32
回答 1查看 788关注 0票数 0

考虑以下情况:我对一个结构使用复合模式,我想从数据库中获取它的根,它实现了一个“级联接口”,级联函数是一个函数,它在顶部执行,但从我的复合树的叶子开始,而幼童总是给出当前的解决方案。leafs以与节点不同的方式实现接口。

代码语言:javascript
复制
@Entity
public class Node implements Cascadable {

  @Id
  @GeneratedValue
  private Long id;

  @OneToMany
  private List<Cascadable> children;
}

显然,这是行不通的,因为我给这个实体和Attribut,这是一个接口和接口不能是一个实体。我可以将接口转换为一个抽象类,利用它创建一个实体,或者使用@ interface或@MappedSuperclass,尽管在这种情况下,我无法用这个树的叶扩展这个新的抽象类,因为它们使用的ID不是生成的。除了我的方法,还有其他选择吗?最优的方法是为子属性使用多个目标实体之类的东西。如果有可能从树的其他部分分离叶,同时仍然使节点知道它包含哪些叶,这将是另一种可能的选择。

问题:在DB中保存一个层次结构,每个节点都需要知道它是稚嫩的,叶子的工作方式与其他节点不同。

(谢谢你的帮助:)

EN

回答 1

Stack Overflow用户

发布于 2018-01-05 10:16:31

有一件事是肯定的:这将永远不适用于接口。多个不相关的实体(每个实体都有一个单独的表)可能实现Cascadable,JPA需要知道要对哪些物理表应用约束。出于同样的原因,不允许多个关联目标。

如果有可能的话,可以把树叶和树的其他部分分开

嗯,解决这个问题的方法是通常的:喜欢组合而不是继承。听起来是桥接模式的一个很好的用例,例如,您可以以“智能”枚举的形式表示要执行的操作。或者,取决于具体的用例,访问者模式也可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48100528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档