我在查询存储库时遇到了通过子对象ID、示例和可分页查找的问题。
StudentController.java
@RestController
@RequestMapping("/students")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping(method = RequestMethod.GET)
public Page<Student> getStudentsPage(
@PageableDefault(page = 0, size = 10) @SortDefault.SortDefaults({
@SortDefault(sort = "id", direction = Direction.DESC) }) Pageable pageable,
Student student) {
return studentService.getStudentPage(student, pageable);
}
}
StudentService.java
@Service
public class StudentService {
private static final Logger logger = LoggerFactory.getLogger(StudentService.class);
@Autowired
private UserService userService;
@Autowired
private StudentRepository studentRepository;
public Page<Student> getStudentsPage(Student student, Pageable pageable) {
logger.debug("Getting Students : {}, {}", student, pageable);
//gets organization Id of the student from the session
String organizationId = userService.getUserMe().getOrganization().getId();
Page<Student> studentPage = studentRepository.findAllByOrganizationId(organizationId, Example.of(student), pageable);
logger.debug("Students: {}", studentPage.getContent());
return studentPage;
}
}
学生存储库.java
@Repository
public interface StudentRepository extends MongoRepository<Student, String> {
Page<Student> findAllByOrganizationId(String organizationId, Example<Student> example, Pageable pageable);
}
Student.java
@Document(collection = "students")
public class Student {
@Id
private String id;
private String firstName;
private String lastName;
@DBRef(db = "organizations")
private Organization organization;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Organization getOrganization() {
return organization;
}
public void setOrganization(Organization organization) {
this.organization = organization;
}
@Override
public String toString() {
return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", organization="
+ organization + "]";
}
}
Organization.java
@Document(collection = "organizations")
public class Organization {
@Id
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Organization [id=" + id + ", name=" + name + "]";
}
}
GET API请求:http://localhost:8080/students?page=0
存储库方法Page findAllByOrganizationId(String organizationId,示例,Pageable Pageable);应该返回具有匹配organizationId和lastName=xyz的所有记录,但它将返回与组织Id匹配的记录以及所有学生,而不考虑lastName。
代码有问题吗?
终于找到了答案。findBy 和示例执行器不能协同工作。
通过设置子对象筛选器并通过示例执行器查询,如下所示。
public Page<Student> getStudentsPage(Student student, Pageable pageable) {
logger.debug("Getting Students : {}, {}", student, pageable);
//gets organization Id of the student from the session
String organizationId = userService.getUserMe().getOrganization().getId();
student.setOrganization(new Organization(organizationId));
Page<Student> studentPage = studentRepository.findAll(Example.of(student), pageable);
logger.debug("Students: {}", studentPage.getContent());
return studentPage;
}
这个果然管用!!
谢谢
问题内容: 我必须编写一个脚本来查找目录中的所有可执行文件。因此,我尝试了几种实现它的方法,它们实际上起作用了。但是我想知道是否有更好的方法。 所以这是我的第一种方法: 这很好用,因为-F标志为我完成了工作,并在每个可执行文件中添加了一个星号,但可以说我不喜欢该星号。 这是第二种方法: 这也很好用,我想用破折号作为第一个字符,然后我对接下来的两个字符不感兴趣,而第四个字符必须是x。 但是需求中有些
我有以下代码用于在对Mongoose数据库的API调用中获取路由,我想使用一个查询字符串来查找包含各种单词的所有项,示例路径是: /CPU=I3&Username=Bob 这将导致所有CPU中包含i3的用户都使用包含bob的名称(一个奇怪的例子!)。 CPU可以是任何一代的,并且实际上包含以下内容: Intel(R)Core(TM)i3-8109U CPU@3.00 GHz或Intel(R)Cor
你会认为这是一件简单的事情。我有一个在我的集合中的对象ID列表。我想根据对象ID获得一条记录。谷歌过,但没有任何帮助。 所以我有对象id:5106c7703abc120a04070b34 此打印: 我试过上述发现的不同版本。它们都无法编译: 查找({_id= 它们都不起作用。如何使用对象id查找(findone)单个记录??
问题内容: 在python中找到对对象的所有引用的好方法是什么? 我问的原因是看起来我们有“内存泄漏”。我们正在将图像文件从Web浏览器上传到服务器。每次执行此操作时,服务器上的内存使用量都会与刚刚上传的文件的大小成比例地增加。python垃圾回收永远不会释放该内存,因此我认为即使在每次请求结束时,也可能存在指向图像数据的流浪引用,这些引用并没有被删除或超出范围。 我认为能够问python很好:“
问题内容: 关于我之前的问题,我想确保所有子对象都已加载,因为我有多个线程可能需要访问数据(从而避免延迟加载异常)。我知道执行此操作的方法是在查询(EJB QL)中使用“fetch”关键字。像这样: 假设模型中包含一个类。 我的问题是,似乎需要“ distinct”关键字,否则我似乎会为每个关键字找回一个。我做对了吗? 也许更重要的是,是否有一种方法可以拉入所有子对象,无论深度如何?我们大约有10
我用的是Spring。我有一个用户表。 当一个人登录系统时,他会向我发送他的凭证(即用户名和密码)。 我用增量生成的uid(即userid是主键)将我的用户存储在数据库中。 我还在数据库中存储了用户名、密码等信息。我需要做的是,当用户连接到Rest连接时,我需要检查数据库是否有这个用户。如果他存在,那么我需要检查密码是否匹配。我需要通过用户名而不是uid进行检查 我的程序中根本没有会话或任何东西(