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

Spring boot JPA按联接表筛选

樊烨烨
2023-03-14

我在文件里找不到具体的东西(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法。查询创建)和一些博客中没有令人满意的答案。所以这里是我的问题。

我有如下表格实体:

@Entity
@Table(name = "workstation")
public class Workstation
{
 @ManyToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "userid", nullable = false)
 public User user;
}

以及用户表实体:

public class user
{
 @Id
 @GeneratedValue(strategy = IDENTITY)
 @Column(name = "ID", unique = true, nullable = false)
 public Integer id;

 @Column(name = "age", nullable = false)
 public int age
}

现在,我想在我的存储库中有这样一个查询:

public interface WorkstationRepo extends CrudRepository<Workstation, Long> {
 findByUserAgeLesserThan(int maxAge);
}

意味着我想通过我的工作站实体找到所有年龄在一定年龄以下的用户。

如果没有@Query注释,这可能吗?或者/以及它应该是什么样子?

共有3个答案

谷梁襦宗
2023-03-14

你应该有这样的东西:

@Query("SELECT w from Workstation w INNER JOIN w.user u where u.age < :age")
List<Workstation> findByUserAgeLessThan(@Param("age") int age);

基本上,您需要使用JPQL连接表。

傅峰
2023-03-14

这工作:

@Query("SELECT w from Workstation w INNER JOIN w.user u where u.age < ?1")
List<Workstation> findByUserAgeLessThan(int age);
邴景山
2023-03-14

试试这个

List<Workstation> findByUserAgeLessThan(int maxAge);

或者你也可以写你的查询

@Query("Select w from Workstation w where w.user.age < :maxAge")
List<Workstation> findByUserAgeLesserThan(@Param("maxAge") int maxAge);
 类似资料:
  • 我想知道如何使用JPA标准API通过相关实体的外键过滤实体。 假设我有两个实体如下: 我想查询ID(1,2,3)部门下的员工。

  • 我将用户和用户配置文件存储在两个单独的表中,users表有username和email列,UserProfile表有name和employee_no列。

  • 问题内容: 我有一个模型可以使用“使行为成为现实”宝石(Github页面)进行投票。投票系统工作正常,但我尝试显示按每个页面有多少排序的页面。 目前,我的控制器根据标签提取资源,但未排序: 如果我使用单个资源并调用“ @ resource.votes.size”,它将返回其拥有的票数。但是,票数是另一张桌子,因此我认为需要进行某种形式的合并,但我不确定如何进行。我需要的是一个可以这样显示的漂亮的有

  • 我正在尝试在我的Spring数据服务中使用查询DSL来实现类似于SQL的查询 成员可以是项目或黑客马拉松的成员。项目是黑客马拉松的一部分。我试图找到哈查顿和子项目的所有成员。 因为谓词产生了交叉连接,所以QueryDslPredicateExecutor接口对我不起作用: 我尝试过使用JPAQuery来手动管理连接策略,但是也遇到了同样的问题: Hibernate:选择memberenti0_.i

  • 我想根据RDD中的值从Cassandra查询一些数据。我的方法如下: 虽然Cassandra查询在Spark shell中工作,但当我在平面图中使用它时,它会引发异常: 我的理解是,我不能在另一个RDD内部产生一个RDD。 我在网络上找到的示例读取RDD中的整个Cassandra表并连接RDD(如下所示:https://cassandrastuff.wordpress.com/2014/07/07

  • 我有一个名为“PN”的父表,在它的实体中包含另一个与第一个表相关的实体“PNDETT”的列表。我想执行一个查询,该查询将给出带有where条件的PN列表,但它将根据where条件过滤“PNDETT”列表。我怎样才能做到这一点? 这是PN映射: