我的问题是:当我对父实体(合同)执行查询时,在子实体(ContractHeader)上应用过滤器并使用FetchType。LAZY,LAZY规则应用正确,但当我尝试访问子列表(ContractHeader)时,过滤器不会应用于子对象,所有子对象都加载到列表中。有人能帮我回答这个问题吗?过滤器应与fetchtype一起使用。懒惰?
有人成功地实施了这样的事情吗?
Tks!
我拥有以下实体:
@Entity
@Table(name = "contract")
@FilterDefs ({
@FilterDef(name = "calculatedFilter", parameters = {@ParamDef(name = "calculated", type = "java.lang.String" )}),
@FilterDef(name = "headerStatusFilter", parameters = {@ParamDef(name = "headerStatus", type = "java.lang.String" )})
})
public class Contract {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "contract_id")
private Long contractId;
@OneToMany(mappedBy="contract",fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval=true)
@Filters( {
@Filter(name="calculatedFilter", condition="calculated = :calculated"),
@Filter(name="headerStatusFilter", condition="header_status = :headerStatus")
})
@JsonManagedReference
private List<ContractHeader> contractHeader;
}
@Entity
@Table(name = "contract_header")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="contractHeaderId", resolver=EntityIdResolver.class, scope = ContractHeader.class)
@Data
html" target="_blank">public class ContractHeader implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "contract_header_id")
private Long contractHeaderId;
@Column(name = "branch")
private Integer branch;
@Column(name = "calculated")
private String calculated;
@Column(name = "header_status")
private String headerStatus;
@ManyToOne(optional=false)
@JoinColumn(name = "contract_id", updatable=false)
@JsonBackReference
private Contract contract;
}
在调用查询之前,我已经启用了过滤器:
一场enableFilter(“calculatedFilter”)。setParameter(“计算的”,“S”);一场enableFilter(“headerStatusFilter”)。setParameter(“headerStatus”,“A”);
查询生成:
访问孩子之前:
select
contract0_.contract_id as contract1_2_
from
contract contract0_
where
exists (
select
contracthe1_.contract_header_id
from
contract_header contracthe1_
where
contract0_.contract_id=contracthe1_.contract_id
and contracthe1_.calculated = ?
and contracthe1_.header_status = ?
)
访问孩子时:
select
contracthe0_.contract_id as contrac28_6_0_,
contracthe0_.contract_header_id as contract1_6_0_,
contracthe0_.contract_header_id as contract1_6_1_,
contracthe0_.calculated as calculat5_6_1_,
contracthe0_.header_status as header_6_6_1_
from
contract_header contracthe0_
where
contracthe0_.contract_id=?
我发现了发生的事情,问题与我对@Transactional的注释位置有关。
问题解决了!
我有模型类别。它可能有父类别和子类别列表。我写这个问题是因为找不到实体和自己相关的情况。 我试图这样实现它: 我保存实体,如: 我希望看到这样的情况: 但是在子模型中,我有递归循环。如何防止它? 是的,我也使用了@JsonIgnore。但是我不确定这是不是一个好的做法。但是如果我有一个案例,当我需要一个类别时,我真的需要将它发送给父母的UI。@JsonIgnore可以产生这个吗?
当我尝试使用时,我得到一个异常。下面是堆栈跟踪: 编辑二:
在过去的三天里,我一直在与错误“跨源请求被阻止:相同的源策略不允许读取http://localhost:8080/demomongo/templateapp/login上的远程资源。”(原因:缺少CORS头'Access-Control-Allow-Origin')。
这是怎么工作https://graph.microsoft.com/v1.0/me/onenote/notebooks?filter=tolower(名)eq'我的笔记本' 来自图形资源管理器的屏幕截图 当我尝试在C#中编写相同的代码时,我得到了以下错误代码:BadRequest消息:无效筛选子句内部错误:AdditionalData:日期:2020-09-02T20:01:24 我正在使用下面的
我使用此解决方案来过滤我的。使用该解决方案,我能够在键入时获得结果。但是当我清除搜索小部件时,我没有得到完整的列表,而是得到了空的。 这就是我的结果。https://imgur.com/nwyetEd 这是我的 这是我的 这是我使用过滤器的< code >活动 有人能帮助我吗?