当前位置: 首页 > 面试题库 >

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

田骁
2023-03-14
问题内容

我正在使用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:

@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()方法与其他普通方法(在调用时会触发代理初始化)区分开。



 类似资料:
  • 问题内容: 我的Java bean与我有很多关系。当我使用如下方式定义变量时: 我得到那个错误: 当我使用时,一切似乎都运行良好。 我想问的是,在使用多对多关系时,哪一个关系用于逻辑概念或(因为列表可能有重复项和集合,但是性能和其他问题又如何)? 问题答案: 从关系数据库的角度来看,这是一个集合。数据库不会保留顺序,并且使用a 是没有意义的,它们的顺序是不确定的(除非使用所谓的 索引集合 )。 使

  • 问题内容: 我在个人课程和汽车课程之间有一对多的关系。一个人可以拥有许多汽车,反之亦然。我正在使用Restful API发布数据。我的注释和Get服务运行正常,但是我的后服务在每次尝试插入新数据时都抛出“ 。子表插入为” 。 这是我的代码的一部分。 人.java 汽车.java 我的服务等级: 问题答案: 此注释: 有两个后果: 暗示这是关系的拥有方。这意味着,每当要在和之间建立关系时, 都需要通

  • 问题内容: 我有实体类A和C。它们正在映射表tblA和tblC,并且它们之间具有多对多关系,而tblB则在它们之间进行映射。tblB包含A_ID,C_ID和SetDate,最后一个是它的设置日期,因此是关系的属性。我的问题是,如何最好地映射此属性?目前,它们尚未映射,如下所示: A: C: 我应该如何从中获取tblB.SetDate? 干杯 尼克 问题答案: 据我所知, 不可能 以这种方式进行映射

  • 问题内容: 我在Hibernate参考书的第21章中有一个基本的一对多关系父母/子女。 级联仅从子级到父级(持久级联仅是因为删除子级后我不希望删除父级)。 当我向父级添加一个子级并保存该子级时,我有一个TransientObjectException … 但是在saveOrUpdate上,我有以下异常: 我真的不明白,因为拯救孩子应该通过级联来拯救父母……有什么想法吗? 更新1 该问题似乎与“ o

  • 问题内容: 我有一个类A {Set b .....},它把B类的引用保存为Set。这是一对多的关系。这两个类在oracle中都有音序器。我在所有的hibernate注释中都添加了层叠。当我保存A类时,它给了我无法插入null B.a_id的错误。A-id在我的数据库中不能为空。我该如何保持这种关系。 问题答案: 这是A-> B的单向关系。表B中的a_id列不可为空。当hibernate试图保存类B

  • 问题内容: 我有两个非常简单的对象,并且一个对象应在一组“一对多”关系中包含另一个对象。对象已正确插入数据库中,但是“子项”表中的外键始终为“ null”。 我不知道为什么: 这是测试对象,它将子对象保持在其集合中: 这是子对象,它包含指向“ TestObj”的反向链接: 我使用以下代码来持久化此对象: 有人可以解释一下为什么会这样吗? 问题答案: 这很简单:您永远不会初始化中的字段(应将其命名为