JDBC:选择具有多对一关系的实体

时间:2015-04-16 18:35:37

标签: jdbc foreign-keys entity

我有两个具有双向多对一关系的实体类。

class A {
  @Column(name="ID")
  long Id;
}

class B {
  @ManyToOne
  @JoinColumn(name="A_ID")
  A a;

}

实体使用其他数据字段以及getter和setter进行了良好编码。现在我想构建一个查询字符串来从表B中获取数据,其中B' A_ID"列等于A" ID"。 我试过这样的事情:

"select b.data1, b.data2 from B b, A a WHERE b.a.Id=a.Id"

但它不起作用。构造此类查询的正确方法是什么?如果A和B处于单向关系中,会有什么不同吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

你不需要加入这些表,@ ManyToOne和@OneToMany背后的整个想法是消除对大多数联接的需求。

我建议您使用JPA教程,例如http://en.wikibooks.org/wiki/Java_Persistence/ManyToOnehttp://en.wikibooks.org/wiki/Java_Persistence/OneToMany

现在,在没有看到您的实际数据库定义的情况下,您有点难以猜测程序和数据库的实际结构,但它应该是这样的:

class A {
  @Id
  @Column(name="ID")
  long Id;

  @OneToMany(mappedBy="a") 
  List<B> bees;
}

class B {
  @ManyToOne
  @JoinColumn(name="A_ID") // Note that A_ID is a column in the B table!!!
  A a;    
}

通过上面的示例,您可以select任意B的列表,JPA会自动为每个找到的B获取相关的A.您不需要做任何事情能够访问它,baId将会工作。

由于我们也有OneToMany关系,每个A可以有多个与之关联的B&。因此,对于提取一组A的任何select,每个返回的A bees字段都可以访问正确的B对象列表,而无需提取B能够进入查询。