首页 > 解决方案 > 标准:如何获得没有父母的孩子

问题描述

我对 Netbeans 上的 Criteria 和 Hibernate 有一点问题。

可以为我服务的解决方案有几个:在 Netbeans 中使用元模型(它是我所有问题的解决方案,但控制台经常吐出一个错误,说它找不到源),或者执行查询所需的代码。

情况如下:我有一个名为 Grado 的父实体和一个名为 Materia 的子实体。这种关系是一对多的。一个 Grado 可以有几个 Materias:英语、数学、物理、伦理学......

我需要做一个或几个查询来获取材料列表而不分配父母。我试图获得的 SQL 中的等价物是:SELECT * FROM Materia where id not in (select id from Materia m join grado_materia g on m.id = g.materias_id);

Grado父实体:

@Entity
public class Grado implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Basic
    private String nombre;

    @OneToMany(orphanRemoval = true)
    private List<Materia> materias;

    //getters and setters
}

Materia子实体

@Entity
public class Materia implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Basic(optional = false)
    private String nombre;

    //getters and setters
}

Hibernate 生成以下关系 grado -> grado_materia <- materia

编辑 为了完成@Spiderman 为我遇到的问题提供的解决方案,我为未来的读者提出了查询

CriteriaBuilder cb = sesion.getCriteriaBuilder();
CriteriaQuery<Materia> cq = cb.createQuery(Materia.class);
Root<Materia> root = cq.from(Materia.class);
cq.select(root);
cq.where(root.get("grado").isNull());
Query query = sesion.createQuery(cq);
List<Materia> results = query.getResultList();

标签: javahibernatenetbeanscriteriahibernate-criteria

解决方案


尝试以下操作:

到 Grado 模型添加

@OneToMany(orphanRemoval = true)
@JoinColumn(name="grado_id")
private List<Materia> materias;

和材料模型添加

@ManyToOne
private Grado grado ;

将上述内容添加到 Materia 模型将阻止创建连接表。


推荐阅读