Don*_*Min 5 java hibernate join
我正在使用hibernate 4+.
我有两个样本表.
表A.
public class A {
@Id
private int id;
@OneToMany(fetch=LAZY)
private List<B> list;
// skip getter&setter
}
Run Code Online (Sandbox Code Playgroud)
表B.
public class B {
@Id
private int id;
@ManyToOne(fetch=LAZY)
@JoinColumn(name="b_id")
private A a;
// skip getter&setter
}
Run Code Online (Sandbox Code Playgroud)
表A(1) - (n)表B关系
我可以在对象B中获取A的id而不使用join吗?
比如int aid = b.getA().getId(); // b是B的实例;
虽然我在声明类B时可以使用int值而不是A.但是另一个服务层使用A和join.
我可以获得id(fk)值吗?
请帮忙.
Dra*_*vic 12
是的,因为无论如何代理都包含id.要获取A代理的id 而不初始化它,首先声明要通过property访问的id:
@Entity
public class A {
@Id
@Access(AccessType.PROPERTY)
private int id;
@OneToMany(fetch=LAZY)
private List<B> list;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,只需读取ID:
b.getA().getId();
Run Code Online (Sandbox Code Playgroud)
更改id的访问类型是必要的,因为如果使用字段访问,Hibernate不会将getId()方法与其他普通方法(在调用时触发代理初始化)区分开来.
您可以在 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;
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以访问实体 A 或仅从实体 B 访问 A 的 id。
| 归档时间: |
|
| 查看次数: |
6747 次 |
| 最近记录: |