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

在Hibernate HQL中,如何筛选主表父级的联接表的结果?

吴同
2023-03-14

我有一个名为“PN”的父表,在它的实体中包含另一个与第一个表相关的实体“PNDETT”的列表。我想执行一个查询,该查询将给出带有where条件的PN列表,但它将根据where条件过滤“PNDETT”列表。我怎样才能做到这一点?

这是PN映射:

@Entity
@Table(name = "PN")
public class Pn implements java.io.Serializable {

private static final long serialVersionUID = 2556879508428749494L;

@Id
@Column(name="ID_PN", unique = true, nullable = false)
private BigDecimal idPN;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_DOC")
private Date dataDoc;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_COMP_BANC")
private Date dataCompBanc;

@Column(name="STATO_PN")
private String statoPN;

@Column(name="TESTO_TESTATA")
private String testoTestata;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_INVIO_SAP")
private Date dataInvioSap;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_INS")
private Date dataIns;

@Column(name="ID_UTENTE_AGG")
private BigDecimal idUtenteAgg;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_CONTABILE")
private Date dataContabile;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_REND_INTEGR")
private Date dataRendIntegr;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATA_AGG")
private Date dataAgg;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pn")
private Set<PnDett> pnDetts = new HashSet<>(0);
@Entity
@Table(name = "PN_DETT")
public class PnDett implements java.io.Serializable {
private static final long serialVersionUID = 2556879508428749494L;

@Id
@Column(name="ID_PN_DETT", unique = true, nullable = false)
private BigDecimal idPNDett;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ID_PN", nullable=false)
private Pn pn;

@OneToOne
@JoinColumn(name="ID_DOM_TIPO_SCRITTURA")
private DomTipoScrittura domTipoScrittura;

@Column(name="TIPO_DOCUMENTO")
private String tipoDocumento;

@Column(name="ID_CALCOLO")
private String idCalcolo;


@Column(name="CONTO_COGE")
private String contoCoge;

@Column(name = "IMPORTO_AVERE")
private BigDecimal importoAvere;

@Column(name = "IMPORTO_DARE")
private BigDecimal importoDare;

@OneToOne
@JoinColumn(name="ID_UTENTE")
private Utente utente;

@Column(name = "DATA_INS")
private Date dataIns;

@Column(name = "TIPO_DETTAGLIO")
private String tipoDettaglio;

@Column(name = "SE_CANC")
private Integer seCancellato;

共有1个答案

相洛华
2023-03-14

为了使过滤器工作,我们可以使用fetch,这将确保初始查询获取所有所需的数据

select * from Pn firstNote join fetch firstNote.pnDetts pnd where firstNote.dataContabile = :param1 and pnd.seCancellato = :param2 and pnd.importoDare <> 0 or pnd.importoAvere <> 0
 类似资料:
  • 问题内容: 我准备了一个 小提琴 来演示这个问题。 我想要一种在删除子记录时将其删除到CASCADE到父记录的方法。 例如: 这应该级联到父表并删除记录。 问题答案: 外键仅在另一个方向上起作用:从父级到子级级联删除,因此,当删除父级(引用)记录时,所有子级(引用)记录也会被删除。 如果是1:1关系,则可以创建双向外键关系,其中一侧为,而两侧均为级联。 否则,您将需要在子表上创建一个触发器,以在没

  • 我得到了下面的SQL,我想将其转换为有效的HQL。这方面的问题是,不允许根据文档加入子查询。尽管这些是旧文档(v3.3),但在hibernate 5.3中,这一节似乎仍然适用。 我想出了这个HQL: 尝试执行此HQL查询会导致此异常 这将提示 在. 有没有办法加入HQL中的子查询?如果不是,那么获得与具有HQL的SQL相同的结果的最佳方法是什么? 我不擅长转换

  • 我将用户和用户配置文件存储在两个单独的表中,users表有username和email列,UserProfile表有name和employee_no列。

  • 我在文件里找不到具体的东西(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法。查询创建)和一些博客中没有令人满意的答案。所以这里是我的问题。 我有如下表格实体: 以及用户表实体: 现在,我想在我的存储库中有这样一个查询: 意味着我想通过我的工作站实体找到所有年龄在一定年龄以下的用户。 如

  • 问题内容: 我遇到一种情况,我需要在ORM类层次结构中的对象上联接表,其中join列不是基类的主键。这是表格设计的示例: 这是映射(为简洁起见,省略了getter和setter方法 鉴于其连接列不是,我如何添加映射? 我尝试了以下方法: 这将失败,因为用于检索Bar对象的SQL试图从FOO表中获取BAR_ID值。我也尝试过将JoinTable注释替换为 这不会产生SQL错误,也不会检索任何数据,因

  • 问题内容: 我有一个希望很简单的MySQL查询问题,在深夜使我难以理解。我正在尝试执行SELECT,该SELECT计算一组数据(订单)的实例数量,并通过在订单本身上方几层的父级中存在的值对这些实例进行分组。 例如: 我正在寻找的是以下附近的东西: SELECT count(orders.id),categoryId来自订单,类别(1,2,3)中的WHERE order.customer_id,GR