我正在使用hibernate4+。
我有两个示例表。
表A
public class A { @Id private int id; @OneToMany(fetch=LAZY) private List<B> 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吗?
像int aid = b.getA()。getId(); // b是B的实例;
尽管在声明类B时可以使用int值而不是A。但是另一个服务层将A与join一起使用。
我可以只获取id(fk)值吗?
请帮忙。
是的,因为代理仍然包含ID。要获取A代理的ID 而不初始化它,请首先声明要通过属性访问的ID:
A
@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; } }
然后,只需读取ID:
b.getA().getId();
更改ID的访问类型是必要的,因为如果您使用字段访问,则Hibernate不会将getId()方法与其他普通方法(在调用时会触发代理初始化)区分开。
getId()