只是获取id列值而不是在hibernate对象中使用join一对多关系

我正在使用hibernate 4+。

我有两个样本表。

表A.

public class A { @Id private int id; @OneToMany(fetch=LAZY) private List list; // skip getter&setter } 

表B.

 public class B { @Id private int id; @ManyToOne(fetch=LAZY) @JoinColumn(name="b_id") private A a; // skip getter&setter } 

表A(1) – (n)表B关系

我可以在对象B中获取A的id而不使用join吗?

比如int aid = b.getA()。getId(); // b是B的实例;

虽然我在声明类B时可以使用int值而不是A.但是另一个服务层使用A和join。

我可以获得id(fk)值吗?

请帮忙。

是的,因为无论如何代理都包含id。 要获取A代理的id而不初始化它,首先声明要通过property访问的id:

 @Entity public class A { @Id @Access(AccessType.PROPERTY) private int id; @OneToMany(fetch=LAZY) private List list; public int getId() { return id; } public void setId(int id) { this.id = id; } } 

然后,只需读取ID:

 b.getA().getId(); 

更改id的访问类型是必要的,因为如果使用字段访问,Hibernate不会将getId()方法与其他普通方法(在调用时触发代理初始化getId()区分开来。

我想你可以使用这篇文章: 属性访问策略

据说如果你只访问id,就不会触发延迟加载

您可以在B中定义两个字段,一个表示关系,另一个表示列:

  @ManyToOne(fetch=LAZY) @JoinColumn(name="b_id") private A a; @Column(name="b_id", updatable=false,insertable=false) //Or correct column private int a_id; 

这样您就可以从实体B访问实体A或只是A的ID。