当前位置: 首页 > 面试题库 >

Spring JPA-部分按EmbeddedId查找

柳鸿博
2023-03-14
问题内容

以下代码仅用于演示目的。

我的 实体 bean看起来像这样

@Entity
class Employee {

    @EmbeddedId
    private EmployeeKey employeeKey;

    private String firstName;
    private String lastName;

    // Other fields
    // Getter and Setters
}

嵌入式 类:

@Embeddable
class EmployeeKey implements Serializable {

    private int employeeId;
    private String branchName;
    private String departmentName;

    //Getter and Setters
}

我可以编写 JPARepository 接口方法以通过EmbeddedId查找雇员,该方法也返回我的结果。

interface EmployeeRepository extends JpaRepository<Employee, EmployeeKey> {
        List<Employee> findByEmployeeKey(EmployeeKey employeeKey);
}

问题: 假设在查询时我只有 employeeIdbranchName ,并且我不想在 departmentName 上放置过滤器
__

  • 在这种情况下,如何编写我的存储库方法
  • JPA是否有针对这种情况的内置功能?

问题答案:

这就是它为我工作的方式。

@Ketrox的答案是绝对正确的并且可以正常工作。但是在我的实际场景中,我有6个字段可以搜索,并且导致方法名称长于120多个字符。( 如下所示

List<Employee> findByEmployeeKeyField1AndEmployeeKeyField2AndEmployeeKeyField3AndEmployeeKeyField4AndEmployeeKeyField5AndEmployeeKeyField6(String field1, String field2, String field3, String field4, String field5, String field6);

当然,这还不够好看,而且还足以使Codenarc不满意。

最终,我通过示例查找,结果证明这是一个非常令人愉快的解决方案。

仓库:

//skipped lines    
import org.springframework.data.domain.Example
//skipped lines
interface EmployeeRepository extends JpaRepository<Employee, EmployeeKey>{
    List<Employee> findAll(Example<Employee> employee);
}

用法:

// Prepare Employee key with all available search by keys (6 in my case)
EmplyeeKey key = new EmplyeeKey();
key.setField1("field1_value");
key.setField2("field2_value");
//Setting remaining 4 fields

// Create new Employee ans set the search key
Employee employee = new Employee();
employee.setEmployeeKey(key);


// Call the findAll by passing an Example of above Employee object
List<Employee> result = employeeRepository.findAll(Example.of(employee));

我已经详细说明了通过Spring Data JPA进行的搜索(部分通过@EmbeddedId查找)



 类似资料:
  • 下面的代码仅供演示。 我的实体bean如下所示 问题:假设在查询时,我只有employeeId和branchName,而我不想在departmentName上放置filter 在这种情况下,如何编写存储库方法 JPA是否有针对此类场景的内置内容?

  • 问题内容: 如何在按部分分组的查询中使用子查询? 我使用SQL Server 2008 R2和Delphi 2010 我收到此错误: 像这个查询: 按t1.sen分组 问题答案: 这是真实的方式

  • 我开始制作一个简单的spring boot应用程序。 我的第一步是利用Spring JDBC支持,使用默认的H2内存数据库。对于示例数据,我在src/main/resources中有schema.sql和data.sql。 所以当spring启动时,它也会执行这两个脚本并填充H2数据库,我可以通过H2控制台访问它。

  • 在我的Spring Boot应用程序中有POJO,下面是它的样子: 现在我想选择所有与给定值相关的方式是POJO的成员。 所以这是我的查询

  • 问题内容: 我正在尝试在postgres中的查询中使用group by。我无法按照我想要的方式对其进行工作,以便根据需要对结果进行分组。 这是对我刚刚回答的递归查询的另一个堆栈问题的扩展。但是现在我需要能够将结果分组到最终查询的root_id列上。这是之前的查询: 这是我想做的,以便将具有相同parent_comment_id的所有记录保存在一起。 可能有许多记录返回了相同的parent_comm

  • 我们必须按降序对数组进行部分排序。 我知道d::partial_sort但它是按升序排列的。 http://en.cppreference.com/w/cpp/algorithm/partial_sort. 是他们的任何其他这样的功能,可以这样做,或任何快速算法这样做。