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

JDBC:选择具有多对一关系的实体,jdbc,foreign-keys,entity,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

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

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"
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;    
}
但它不起作用。构造这样一个查询的正确方法是什么?如果A和B是单向关系,会有什么区别吗?
提前感谢。

您不需要加入表,@manytone和@OneToMany背后的整个想法就是消除对大多数加入的需要

我建议你参考一个关于JPA的教程,比如和

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

"select b.data1, b.data2 from B b, A a WHERE b.a.Id=a.Id"
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;    
}
A类{
@身份证
@列(name=“ID”)
长Id;
@OneToMany(mappedBy=“a”)
列出蜜蜂;
}
B类{
@许多酮
@JoinColumn(name=“A\u ID”)//注意A\u ID是B表中的一列!!!
A A;
}
在上面的例子中,你可以选择你需要的任何B列表,JPA会自动为每个找到的B获取关联的A。你不需要做任何事情就可以访问它,B.A.Id就可以了

因为我们也有一对一的关系,每个A可以有多个B与之关联。因此,对于任何获取一组a的
select
,每个返回的a的
bees
字段都将允许访问B对象的适当列表,而无需将B table拉入查询中