当前位置: 首页 > 知识库问答 >
问题:

Hibernate一对一条件抓取

艾善
2023-03-14

我正在使用hibernate在car和person表之间进行一对一映射。但一个人可能有车,也可能没有车。现在,在使用hibernate标准从person表中获取记录时,我只想获取那些拥有汽车的人,即person表中存在相应汽车表条目的条目。如何使用hibernate标准/别名实现这一点?

下面是一段代码。请提供获取结果所需的条件或别名:

@Getter
@Setter
@Entity
@Table(name = "Person")
public class Person implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Person_ID")
    private Long personId;

    @OneToOne(mappedBy = "personAsset", cascade = CascadeType.ALL)
    private Car car;
}

@Getter
@Setter
@Entity
@Table(name = "Car")
public class Car implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Car_ID")
    private Long carId;

    @OneToOne
    @JoinColumn(name = "Person_ID")
    private Person personAsset;
}

共有2个答案

孟茂学
2023-03-14
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> person = query.from(Person.class);
Predicate predicate = cb.isNotNull(person.join("car"));
predicates.add(predicate );
羊舌志
2023-03-14

你要找的是@OneToOne注释上的cascadeType孤儿移除=true

这是你的班级会是什么样子:

@Getter
@Setter
@Entity
@Table(name = "Car")
public class Car implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Car_ID")
    private Long carId;

    @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name = "Person_ID")
    private Person personAsset;
}
 类似资料:
  • 我有示例代码来检查双向关系是如何工作的。 我可以看到这种表h2表:- A:- B:- 对于B表,我期待一个列,正如我在代码中提到的。 所以我在我的控制器中,如果我试图检索B,如下所示:- 它就像一条链条,一条链条,一条链条。我正在学习hibernate和表的关系。显然我误解了什么。我的目的是双向的,当我加载A时,我可以访问相关的B。同样,当我加载B时,我可以访问相关的A。我如何实现这个目标?

  • 问题内容: 假设我有一个表Person,并且我想对“ birthDate”不为null并且他们是学生的所有人员进行计数。假设我有两列: 我该如何使用hibernate方式呢? 问题答案: Criteria crit = session.createCriteria(Person.class); crit.add( Restrictions.isNotNull(“birthDate”)); crit

  • 问题内容: 我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。 A类的映射指定: B类的映射指定: 我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中): 但是,看来b永远不会为空。 我该怎么办? 问题答案: 答案是在A中的多对一语句中添加not-found =“ ignore”: 我尝试按照Rob H的建议,简单地向

  • 我有两个不同的表,Person表和Employee表。我需要这两者之间的一对一映射。Employee表的emp_id引用Person表的person_id。在使用注释编写映射方面我需要一些帮助

  • 我需要帮助在java类中为这些关系表创建映射Hibernate注释(一对一): 有人能帮我吗?谢谢你。

  • 问题内容: 我有一对一的关系,但是hibernatetool在生成模式时抱怨。这是显示问题的示例: 人与OtherInfo具有一对一关系: 人是OtherInfo的拥有方。OtherInfo是拥有方,因此person用于在Person中指定属性名称“ otherInfo”。 使用hibernatetool生成数据库架构时出现以下错误: 知道为什么吗?我是在做错什么还是这是Hibernate错误?