小编典典

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

hibernate

我正在使用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)值吗?

请帮忙。


阅读 261

收藏
2020-06-20

共1个答案

小编典典

是的,因为代理仍然包含ID。要获取A代理的ID 而不初始化它,请首先声明要通过属性访问的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;
  }
}

然后,只需读取ID:

b.getA().getId();

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

2020-06-20