我有两个具有双向多对一关系的实体类。
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处于单向关系中,会有什么不同吗? 提前谢谢。
答案 0 :(得分:0)
你不需要加入这些表,@ ManyToOne和@OneToMany背后的整个想法是消除对大多数联接的需求。
我建议您使用JPA教程,例如http://en.wikibooks.org/wiki/Java_Persistence/ManyToOne和http://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能够进入查询。