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

Spring Data JPA@Query注释和Hibernate@Where注释的互通

仲孙文乐
2023-03-14

关于@where注释和@query注释,我遇到了一个有趣的问题在Spring Boot项目上,spring data jpa也在项目中。

基本上,我有软删除机制,这是为实体设置一个有效的日期(例如属性valide_date列在实体类中带有validdate属性)。这些实体用@where注释类似于@where(valid_date>now()“)。这样,将valid_date设置为now和before的软删除的实体自动删除。(例如实体类用户)

@Entity
@Table(name = "user")
@SQLDelete(sql = "...") // to update valid date for soft deleting entity
@Where(clause="valid_date > now()") //to apply non deleted entity automatically
public class User {

    @OneToOne(...)
    BaseEntity base;
}

我还有一些其他实体没有valid_date(例如实体类userrequest)

@Entity
@Table(name = "user_request") //
public class UserRequest {

    @OneToOne(...)
    BaseEntity base;
}

以及其他一些可用的表。如果是Jpa查询带注释的方法。我正面临着一些问题。

@Query("SELECT new com.foo.RequestListDto(B, S, I, U) from UserRequest B " +
        " left join fetch AnotherTable I on I.base = B.base" +
        " left join fetch User U on U.base = B.base" +
        " left join fetch UserRequest S on S.base = B.base " +
        " where B.id IN :idList")

调用具有上述@query注释的方法时;查看生成的sql;我看不到valid_date>now()子句应用于用户实体。“如果”用户实体如上图所示在连接端。如果我将from子句更改为“from User u”,那么valid_date规则将应用于查询。

概括地说;@where批注仅在包含实体位于from子句时应用。但如果包含实体不在from子句上,则不应用。

没有应用我不知道的@where注释的具体原因吗?我应该怎么做才能自动应用@where注释?

共有1个答案

蓬新
2023-03-14

@where注释的工作方式与它应该工作的方式完全相同。仅在from是带注释实体的请求中。如果要将它用于join,那么还需要对“join-definition”进行注释--这是@OneToOne注释所注释的属性。您还可以将@where批注添加到属性中。因此,将@where批注添加到要在查询的from部分中使用的实体中的User属性中

@OneToOne(...)
@Where(clause="valid_date > now()")
User user;
 类似资料:
  • 问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所有

  • 和和注释之间有什么区别? 我们应该在什么时候使用它们每一个?

  • 我有一个包含三个字段的表,比如a、b、c。我想添加一个约束,确保如果a不为null,那么b和c也不为null。我已经使用以下SQL完成了这项工作 使用hibernate注解@Check有没有办法达到同样的效果? 我找不到一个有用的注释示例,开发人员倾向于根本不使用它吗?

  • 在Hibernate Manytone和双向关系中,在childentity表中,插入了行列表,但未插入parent\u id。下面给出了我使用的代码。 } 在这种情况下,我得到的错误调用,parent_id不应该是空的DAO类。 如果我删除nullable=false,则会在数据库中插入子实体,但不存在parent\u id。

  • 本文向大家介绍Oracle 获取表注释和列注释,包括了Oracle 获取表注释和列注释的使用技巧和注意事项,需要的朋友参考一下 全部表 表的注释 列的注释 相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列 以上所述是小编给大家介绍的Oracle 获取表注释和列注释,希望对大家有所帮助,如果大家有任何疑问请给我留言

  • 我一直试图理解HQL和JPQL之间的区别。冬眠留档在这里 建议写入选择是JPQL所必需的,但不是在HQL中。但是当我尝试在Spring数据JPA的查询注释中编写HQL或JPQL时,HQL和JPQL都可以工作。 我的理解是,既然查询注释是针对JPA的,为什么支持HQL? 或者让我换个说法- 我们可以在查询注释中编写HQL吗——Spring数据JPA支持两者吗?