Gần đây, tôi gặp phải một vấn đề phức tạp khi tôi phải tạo một truy vấn động hoàn toàn. Vì việc tìm kiếm giải pháp hơi tốn thời gian, nên bạn nên viết về nó trong một bài báo chuyên dụng. Tôi hy vọng nó sẽ giúp người khác Show Kịch bảnXem xét tình huống sau Bạn có một thực thể có 5 cột. Mệnh đề Ví dụ Ví dụ về các cột được chọn bởi tác giảCác trường màu xanh là do người dùng chọn Giả sử rằng ứng dụng của bạn tạo truy vấn JPA sau. vấn đề với nó là gì? select sr.user, sr.timestamp, sr.status, sr.date, sr.instances from SERVER_RECORD sr where sr.user = 'user123' group by sr.status; Nó sẽ hiển thị lỗi nói rằng phần còn lại của các cột, cụ thể là "người dùng, dấu thời gian, ngày, phiên bản", không được bao gồm trong mệnh đề Column ‘{the column name}’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause Tất cả các cột trong mệnh đề Trong bài đăng này, tôi sẽ chỉ cho bạn một cách để giải quyết vấn đề Hướng dẫn này giả định rằng bạn đã quen thuộc với Java Persistence Criteria API Hãy đi sâu vào nó giải pháp dự án Để minh họa tình huống, hãy tạo một ví dụ đơn giản. Hãy tưởng tượng rằng bạn muốn truy vấn các bản ghi từ một bảng có tên là Hãy đặt tên cho dịch vụ sẽ truy vấn dữ liệu Column ‘{the column name}’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 0và lấy một phiên bản Column ‘{the column name}’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 1Tạo dịch vụ tìm bản ghiHãy viết một phương thức trả về các bản ghi Phần đầu tiên của phương thức getRecords()Vì chúng tôi không có giao diện người dùng nên chúng tôi sẽ mã hóa cứng đầu vào của người dùng cho mục đích demo Phần chọn
Nhóm theo từng phần
Hãy xây dựng truy vấn Phần thứ hai của phương thức getRecords()Phần chọn lấy các cột đã chọn từ đầu vào của người dùng và đặt chúng vào danh sách Column ‘{the column name}’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 5Đó là nội dung của phương pháp Column ‘{the column name}’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 6
Bây giờ là lúc để tạo một java.lang.IllegalArgumentException: Given alias [some alias] did not correspond to an element in the result tuple at org.hibernate.jpa.spi.CriteriaQueryTupleTransformer$TupleImpl.get(CriteriaQueryTupleTransformer.java:93) 5 và thực hiện nó
Bây giờ, chúng ta có thể lặp lại kết quả truy vấn và ánh xạ nó tới thực thể select sr.TIMESTAMP, sr.USER from SERVER_RECORD sr where sr.USER = 'xyz' group by sr.TIMESTAMP, sr.USER, sr.DATE; 0Đây là giao diện của phương thức select sr.TIMESTAMP, sr.USER from SERVER_RECORD sr where sr.USER = 'xyz' group by sr.TIMESTAMP, sr.USER, sr.DATE; 1Bạn có thể tự hỏi mục đích của phương pháp này là gì. Hãy nhớ rằng chúng tôi đã xác định một danh sách động các lựa chọn cho mệnh đề select sr.TIMESTAMP, sr.USER from SERVER_RECORD sr where sr.USER = 'xyz' group by sr.TIMESTAMP, sr.USER, sr.DATE; 3 và nó không tồn tại, nó sẽ đưa ra một ngoại lệ như thế nàyjava.lang.IllegalArgumentException: Given alias [some alias] did not correspond to an element in the result tuple at org.hibernate.jpa.spi.CriteriaQueryTupleTransformer$TupleImpl.get(CriteriaQueryTupleTransformer.java:93) Do đó, chúng ta chỉ cần đặt những giá trị có cột nằm trong tập hợp select sr.TIMESTAMP, sr.USER from SERVER_RECORD sr where sr.USER = 'xyz' group by sr.TIMESTAMP, sr.USER, sr.DATE; 4. Nếu không, chúng tôi đặt giá trị thuộc tính thành select sr.TIMESTAMP, sr.USER from SERVER_RECORD sr where sr.USER = 'xyz' group by sr.TIMESTAMP, sr.USER, sr.DATE; 5 để bỏ qua
Làm cách nào để thực thi truy vấn MongoDB trong Spring Boot?2. 1 Bước#0. Thiết lập MongoDB với Spring Boot 2. 2 Bước #1. Tạo Dự án khởi động mùa xuân bằng STS (Bộ công cụ mùa xuân) 2. 3 Bước #2. Cập nhật ứng dụng. của cải 2. 4 Bước#3. Tạo lớp thực thể 2. 5 Bước #4. Tạo giao diện kho lưu trữ 2. 6 Bước #4. Lưu một số bản ghi vào MongoDB. 2. 6. 1 Đầu ra từ MongoDB Làm cách nào để sử dụng chú thích @query trong khởi động mùa xuân với MongoDB?Chú thích @Query khá đơn giản và dễ hiểu. @Query("mongo query") public List Khi phương thức findBy() được gọi, . Hãy nhớ rằng trong thời gian biên dịch, Spring Boot không biết trước loại truy vấn sẽ trả về.
Làm cách nào để lấy các trường cụ thể từ MongoDB trong Spring Boot?Chỉ trả về các trường cụ thể cho một truy vấn trong Spring Data MongoDB . Tổng quan. Khi sử dụng Spring Data MongoDB, chúng ta có thể cần hạn chế các thuộc tính được ánh xạ từ một đối tượng cơ sở dữ liệu. . Hạn chế các trường MongoDB bằng phép chiếu. . Thực hiện phép chiếu. . Kiểm tra bằng MongoRepository và MongoTemplate. . Phần kết luận Làm cách nào để tham gia hai bộ sưu tập trong MongoDB bằng Spring Boot?Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $ . Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. Ví dụ: nếu người dùng yêu cầu tất cả các điểm từ tất cả học sinh, thì truy vấn bên dưới có thể được viết. Sinh viên. |