1

我正在使用:
Spring 3.2
Hibernate 4.1.9

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

表 A

foo
id | name

表 B

bar
id | name

表 C

data
id | xrefId

连接表-- (fooId,barId) 上的唯一键

xref
id | fooId | barId

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

编辑1:

目标:加载一个 Foo,获取它的 Bars 集合。从每个 Bar 中,获取其(他们的!)数据集合。

A级

@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;
}
4

3 回答 3

0

吻就对了。创建另一个类外部参照,其中包含idfoo和字段。使用两个参数和(用简单的 HQL 实现)创建一个 DAO 方法来查找外部参照。唯一要求可以通过数据库中的唯一约束来实现。barSet<Data>foobar

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

于 2013-01-15T16:34:33.153 回答
0

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

于 2013-01-15T16:34:35.837 回答
0

看这个例子(为简单起见,使用 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;
}

富类:

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

外部参照类:

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 自动生成,前提是在 DB 中正确定义了所有表和索引

于 2013-01-15T18:37:04.083 回答