【问题标题】:spring-data-jpa-datatables: Ignore Hibernate @Where annotationspring-data-jpa-datatables:忽略 Hibernate @Where 注释
【发布时间】:2021-07-08 10:05:12
【问题描述】:

对于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> {
}

【问题讨论】:

    标签: hibernate jpa spring-data-jpa spring-data-jpa-datatables


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • spring-data-jpa-datatables 有它自己的DataTablesRepository 实现,我怀疑nativeQuery 在这里可以提供帮助。请参阅 github.com/darrachequesne/spring-data-jpa-datatables
      • 您可以创建自己的方法并为此使用本机查询。
      • 再一次,情况并非如此。 pring-data-jpa-datatables 的目的是根据 GUI 状态在后台动态创建查询。 nativeQuery 与这个想法相矛盾。
      猜你喜欢
      • 2019-01-21
      • 2021-06-01
      • 1970-01-01
      • 2015-11-13
      • 2014-10-06
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多