如何影响冬眠过滤器位置的位置



给定以下实体:

@FilterDef(name = "TENANT_FILTER", parameters = {
        @ParamDef(name = "tenantId", type = "long")
    })
@Filter(name = "TENANT_FILTER", condition = "tenant_id = :tenantId")
public class Pariticipant {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "tenant_id")
    private Long tenantId;
    @Column(name = "firstname")
    private String firstName;
    @Column(name = "lastname")
    private String lastName;
}

我激活过滤器并使用弹簧数据存储库查询实体:

Filter filter = entityManager.unwrap(Session.class).enableFilter("TENANT_FILTER");
filter.setParameter(fieldName, 1L);
// query using SpringData Repository
Pariticipant p = repository.getById(10L);

Hibernate生成以下查询:

SELECT participant0_.id AS id2_97_,
       participant0_.tenant_id AS tenant_i3_97_,
       participant0_.firstname AS firstname_97_,
       participant0_.lastname AS lastname_97_
FROM participant participant0_
WHERE participant0_.tenant_id = 1
  AND participant0_.id=?

作为 id是主要键,如果where子句的顺序是相反的,例如。将过滤器附加而不是预先添加到WHERE子句中。例如:

SELECT participant0_.id AS id2_97_,
       participant0_.tenant_id AS tenant_i3_97_,
       participant0_.firstname AS firstname_97_,
       participant0_.lastname AS lastname_97_
FROM participant participant0_
WHERE participant0_.id=?
  AND participant0_.tenant_id = 1

这是一个非常简单的例子,但是问题越复杂,问题越糟。在我们的情况下,如果将过滤器附加而不是预先处理,则每个查询都会受益。

是否有任何方法可以影响滤波器中添加过滤器的位置?

无法做到这一点。以及条件顺序对执行速度具有可测量影响的假设对许多人(大多数吗?(严重的现代数据库是错误的。

最新更新