当前位置: 首页 > 知识库问答 >
问题:

JPA映射-每个孩子的父母的唯一组合

戚升
2023-03-14

我正在使用:
Spring3.2
Hibernate4.1.9

我需要用JPA映射三个类。A类和B类有很多种关系。A类和B类的唯一组合需要拥有C类的集合。

表A

foo
id | name

B表

bar
id | name

表C

data
id | xrefId

联接表--上的唯一键(fooId、barId)

xref
id | fooId | barId

改变现有的数据结构不是一种选择。

编辑1:

目标:加载一个Foo,获取它的条集合。从每个酒吧,得到它的(他们的!)收集数据。

甲级

@Entity
public class Foo {
  @Id
  private UUID id;

  @ManyToMany(optional = false)
  @JoinTable(name               = "xref",
             joinColumns        = { @JoinColumn(name = "fooId") },
             inverseJoinColumns = { @JoinColumn(name = "barId") })
  private List<Bar> lstBar = new ArrayList<Bar>();
}

B类

public class Bar {
  @Id
  private UUID id;

  @ManyToMany(mappedBy = "lstBar")
  private List<Foo> lstFoo = new ArrayList<Foo>();
}

C类

public class Data {
  @Id
  private UUID id;
}

共有3个答案

厍光霁
2023-03-14

看看这个例子(为了简单起见,使用Integer而不是UUID,其余的应该可以)。

酒吧类:

public class Bar {
    @Id
    private Integer id;
    @Column(name = "name")
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "barId")
    private Collection<Xref> xrefCollection;
}

Foo类:

public class Foo {
    @Id
    private Integer id;
    @Column(name = "name")
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fooId")
    private Collection<Xref> xrefCollection;
}

Xref类:

public class Xref {
    @Id
    private Integer id;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "xrefId")
    private Collection<Data> dataCollection;
    @JoinColumn(name = "bar_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Bar barId;
    @JoinColumn(name = "foo_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Foo fooId;
}

数据类:

public class Data {
    @Id
    private Integer id;
    @JoinColumn(name = "xref_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Xref xrefId;
}

此代码由NetBeans自动生成,前提是数据库中正确定义了所有表和索引

巫马俊力
2023-03-14

您的联接表,xref,有一个额外的id字段,为了能够使用JPA创建这样一个表,您需要一个额外的实体类xref,然后您必须映射axref之间以及Bxref之间的关系(两者都是一对多)。然后,您可以创建实体类C,并映射CXRef之间的关系。你需要更多的帮助吗?我现在没有时间提供代码,但是如果您需要询问,我会尽快添加代码。

鄢晔
2023-03-14

只是吻。创建另一个类Xref,其中包含idfoobarSet

仅仅通过类层次结构来表达它看起来不太好,最好使用DAO。

 类似资料:
  • 实现一对多关系并选择父项和子项我有一个关系,我想进行查询(选择*) 文件夹。JAVA 作者。JAVA 我的请求: 我得到了这样的结果: 我的代码有什么问题?什么是问题,当我执行查询我得到了这个结果...我想得到这个结果

  • 我正在使用JPA 如果我有一堆相关的实体,如下所示: 祖父母实体有许多父实体(一个实体)。使用联接表持久化 父实体有一个子实体(OneToOne)。在父表中使用child\u uuid持久化 如果我只获得了子唯一密钥,我如何获得祖父母实体? 我的想法是一个有3个连接的查询-子连接到父连接,父连接到表,将表连接到祖父母。这是最好的方式吗?

  • 我一直在将代码从JIT转换到D3,并使用树布局。我已从中复制了代码http://mbostock.github.com/d3/talk/20111018/tree.html使用我的树数据,但我想做更多。 在我的例子中,我想创建子节点,这些子节点合并回一个较低级别的父节点,我意识到这更像是一个有向图结构,但是希望树能够适应这一点(即注意子节点之间的公共id应该合并)。 因此,基本上,一棵树在从父母到

  • 问题内容: 我有下表: 我想让Folder类具有父子关系。 问题答案: 我相信正确的映射将是: 该会的工作只有当每个家长有最多一个孩子,上面的代码适用于更一般的情况下,父母可以有许多儿童。另外,为简单起见,我省略了get / set方法。

  • 问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询:

  • 因此,我想向附加到组件的任何子级添加某些样式。假设父组件称为,子组件称为。在我正在尝试以下方法:- 上述方法对我不起作用。我想知道为什么。还有没有一种方法可以让我在孩子们之间绘制地图,并将他们包装在一个新的组件中?像这样的东西;