spring-data-jpa-datatables:忽略 Hibernate @Where 注释

问题描述

对于spring-data-jpa-datatables:4.3,如何让DataTablesRepository返回所有实体,忽略Hibernate的@Where注解?

这是一个带有 Hibernate 的 @Where 注释的实体:

@Entity
@sqlDelete(sql = "UPDATE vehicle SET deleted_at = Now() WHERE id = ?")
@Where(clause = "deleted_at IS NULL")
public class Vehicle extends AbstractEntity implements Serializable {...}

这是一个扩展spring-data-jpa-datatables的DataTablesRepository的相应存储库:

@Repository
public interface VehicleDataTableRepository extends DataTablesRepository<Vehicle,Long> {
}

解决方法

这不可能。 @Where 谓词始终适用。您可以再次将同一个表映射到不同的实体类而不使用 @Where 并查询,如果您愿意,或者您创建过滤器 (@Filter) 而不是使用 @Where 并确保过滤器始终处于活动状态,除非您明确不希望应用过滤器谓词。另见:https://docs.jboss.org/hibernate/orm/5.5/userguide/html_single/Hibernate_User_Guide.html#pc-filter

,

您可以编写如下所示的本机查询。

@Query(value="SELECT * FROM table Name",nativeQuery=true)
public ignoreWhereClauseQuery(){}

@Query 注解中的 SQL 必须指向表名和字段名(不是实体名)。