标准:如何在没有 parents 的情况下得到孩子
Criteria: How to get childs without parents
我对 Netbeans 上的 Criteria 和 Hibernate 有点问题。
可以为我服务的解决方案有几种:使用Netbeans中的元模型(它是我所有问题的解决方案,但控制台经常吐出一个错误说它找不到源),或者需要的代码做查询。
情况如下:
我有一个名为 Grado 的 parent 实体和一个名为 Materia 的 child 实体。关系是一对多的。一个Grado可以有好几个Materias:英语、数学、物理、伦理学...
我需要进行一个或多个查询,以在不分配 parent 的情况下获取材料列表。我试图获得的 SQL 中的等价物是:SELECT * FROM Materia where id not in (select id from Materia m join grado_materia g on m.id = g.materias_id);
Grado parent实体:
@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
}
材料 child实体
@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();
尝试以下操作:
为 Grado 模型添加
@OneToMany(orphanRemoval = true)
@JoinColumn(name="grado_id")
private List<Materia> materias;
并在 Materia 模型中添加
@ManyToOne
private Grado grado ;
将以上内容添加到 Materia 模型将阻止创建连接 table。
我对 Netbeans 上的 Criteria 和 Hibernate 有点问题。
可以为我服务的解决方案有几种:使用Netbeans中的元模型(它是我所有问题的解决方案,但控制台经常吐出一个错误说它找不到源),或者需要的代码做查询。
情况如下: 我有一个名为 Grado 的 parent 实体和一个名为 Materia 的 child 实体。关系是一对多的。一个Grado可以有好几个Materias:英语、数学、物理、伦理学...
我需要进行一个或多个查询,以在不分配 parent 的情况下获取材料列表。我试图获得的 SQL 中的等价物是:SELECT * FROM Materia where id not in (select id from Materia m join grado_materia g on m.id = g.materias_id);
Grado parent实体:
@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
}
材料 child实体
@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();
尝试以下操作:
为 Grado 模型添加
@OneToMany(orphanRemoval = true)
@JoinColumn(name="grado_id")
private List<Materia> materias;
并在 Materia 模型中添加
@ManyToOne
private Grado grado ;
将以上内容添加到 Materia 模型将阻止创建连接 table。