2014-11-21 16 views
8

tôi sử dụng querydsl đó là lý do tại sao tôi không cần phương thức như findByName() và tất cả giao diện kho lưu trữ của tôi trống.Mã chung không thành công với dữ liệu Spring và Querydsl

Vì vậy, tôi cố gắng làm cho mã genric để tránh giao diện lặp đi lặp lại với các phương thức trống vì tôi có nhiều lớp trong thực thể của tôi được ánh xạ bởi hibernate.

public interface GenericResposotory<T> 
       extends JpaRepository<T, Integer>, QueryDslPredicateExecutor<T> { 

} 

Khi tôi chạy máy chủ của tôi, tôi nhận được lỗi này:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericResposotory': 
Invocation of init method failed; nested exception is 
java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 

cũng không có một cách để làm cho một kho lưu trữ chung chung như tôi cố gắng để làm gì?

+0

phiên bản mùa xuân là bạn không? –

+0

tôi sử dụng 4.0.5.RELEASE cho mùa xuân và 1.6.0.RELEASE cho spring-data-jpa – Youssef

Trả lời

1

Dữ liệu mùa xuân cố gắng tạo hạt cho tất cả các giao diện bạn tạo để mở rộng JpaRepository. Nếu bạn muốn có một loại kho lưu trữ cơ sở đó sẽ không được sử dụng đánh dấu giao diện của bạn với @NoRepositoryBean

+0

Tôi đánh dấu nó nhưng tôi nhận được 'Không thể autowire trường: private repository.GenericRespository' khi tôi thử' @Autowired \t riêng GenericRespository region_repository; ' – Youssef

+1

Ok, vì vậy tôi đã hiểu nhầm câu hỏi. Tôi nghĩ rằng giao diện này là một cơ sở cho những thứ khác và bạn mở rộng nó với các giao diện khác. Trong trường hợp đó tôi không nghĩ rằng nó có thể đạt được những gì bạn muốn. Bạn chỉ cần mở rộng genericinterface với một số khác và đặt T cho một số lớp. – Nadir

0

Repository là một giao diện đánh dấu cho mùa xuân, giúp để tìm kho mở rộng của riêng bạn và tạo kho lưu trữ bằng cách chiết xuất các loại thực thể . Chúng ta có thể thấy trong RepositoryFactorySupport:

Bean nhà máy để tạo ra các phiên bản của giao diện kho lưu trữ đã cho. Tạo proxy triển khai giao diện kho lưu trữ * đã định cấu hình và áp dụng lời khuyên trao điều khiển cho
QueryExecuterMethodInterceptor. Truy vấn * chiến lược phát hiện có thể được được định cấu hình bằng cách đặt QueryLookupStrategy.Key.

Đó là lý do tại sao, tôi nghĩ, bạn không thể tạo kho lưu trữ chung trực tiếp.

Nhưng bạn có thể thử sử dụng RepositoryFactorySupport (triển khai JpaRepositoryFactory) để tạo kho và đặt vào ngữ cảnh theo cách thủ công.

Ngoài ra, bạn có thể giảm số lượng các tập tin trong dự án và ô nhiễm không gian tên bằng cách định nghĩa các kho như giao diện bên trong: chỉ cần thêm một thuộc tính như hình dưới đây:

<jpa:repositories base-package="com.pack" consider-nested-repositories="true"/> 
Các vấn đề liên quan