cuốn sách gpt4 ai đã làm

Kế thừa đặc tả JPA dữ liệu mùa xuân

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 23:01:52 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi có ba thực thể như dưới đây:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type")
lớp trừu tượng công khai Nhân viên {
@Id
id dài được bảo vệ;
...
}

@Entity
lớp công khai FullTimeEmployee mở rộng Nhân viên {
lương nguyên được bảo vệ;
...
}

@Entity
lớp công khai PartTimeEmployee mở rộng Nhân viên {
được bảo vệ Tiền lương theo giờ;
}

Tôi thử sử dụng Đặc tả dữ liệu Spring để truy vấn như được hiển thị:

Kho quản lý dữ liệu Spring của tôi:

@Kho lưu trữ
giao diện công cộng Nhân viênRepository mở rộng JpaRepository {
Trang findAll(Thông số kỹ thuật, Có thể phân trang được);
}

và ví dụ của tôiContoder

@Controller
lớp công khai MyController {
riêng cuối cùng Nhân viên Kho lưu trữ nhân viên Kho lưu trữ;

@Autowired
công khai MyController(EmployeeRepository nhân viênRepository) {
this.employeeRepository = nhân viênRepository;
}

@GetMapping("/")
truy vấn ModelAndView công khaiEmployeeExample(Truy vấn EmployeeQueryDTO) {
Phản hồi của trang = this.employeeRepository.findAll((root, CriteriaQuery, CriteriaBuilder) -> {
Vị từ ArrayList = new ArrayList<>();
if(query.getId() != null) {
vị ngữ.add(
tiêu chíBuilder.equal(root.get("id"), query.getId())
);
}
if(query.getSalary() != null) {
vị ngữ.add(
tiêu chíBuilder.equal(root.get("salary"), query.getSalary())
);
}
if(query.getHourlyWage() != null) {
vị ngữ.add(
tiêu chíBuilder.equal(root.get("hourlyWage"), query.getHourlyWage())
);
}
trả về tiêu chíBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}, PageRequest mới(0, 100));

trả về ModelAndView mới ("chỉ mục")
.addObject("kết quả", phản hồi);
}

@Getter
@Setter
lớp tĩnh Nhân viênQueryDTO {
private Long id;
lương riêng Số nguyên;
riêng Float theo giờ;
}
}

Tôi có thể thực hiện truy vấn bằng id nhưng điều tương tự không xảy ra với các tham số khác như mức lương và mức lương theo giờ, tôi gặp ngoại lệ này:

java.lang.IllegalArgumentException: Không thể định vị Thuộc tính có tên đã cho [lương/Tiền lương theo giờ] trên ManagedType [Nhân viên] này

Tôi hiểu rằng vấn đề là tìm kiếm trường trong siêu lớp không tồn tại, tôi tự hỏi liệu có giải pháp nào cho vấn đề của mình không?

lời chào.

câu trả lời hay nhất

Được sử dụng làm dấu nhắc @JBNizetTiêu chíBuilder.treat():

@GetMapping("/")
truy vấn ModelAndView công khaiEmployeeExample(Truy vấn EmployeeQueryDTO) {
Phản hồi của trang = this.employeeRepository.findAll((root,
tiêu chíTruy vấn,
tiêu chíBuilder) -> {

Vị từ ArrayList = new ArrayList<>();

if(query.getId() != null) {
vị ngữ.add(
tiêu chíBuilder.equal(
root.get("id"),
truy vấn.getId()
)
);
}
if(query.getSalary() != null) {
// Hạ thấp đối tượng Root về loại đã chỉ định.
Root rootFullTimeEmployee = CriteriaBuilder
.treat(root, FullTimeEmployee.class);
vị ngữ.add(
tiêu chíBuilder.equal(
rootFullTimeEmployee.get("lương"),
truy vấn.getSalary()
)
);
}
if(query.getHourlyWage() != null) {
// Hạ thấp đối tượng Root về loại đã chỉ định.
Root rootPartTimeEmployee = CriteriaBuilder
.treat(root, PartTimeEmployee.class);
vị ngữ.add(
tiêu chíBuilder.equal(
rootPartTimeEmployee.get("hourlyWage"),
query.getHourlyWage()
)
);
}
trả về tiêu chíBuilder.and(predicates.toArray(new Predicate[predicates.size()]));},
PageRequest mới(0, 100));

trả về ModelAndView mới ("chỉ mục")
.addObject("kết quả", phản hồi);
}

@Getter
@Setter
lớp tĩnh Nhân viênQueryDTO {
private Long id;
lương riêng Số nguyên;
riêng Float theo giờ;
}

Về kế thừa đặc tả java - Spring Data JPA, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/48529445/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress