2012-07-09 30 views
6

Tôi có một số đối tượng miền:mùa xuân dữ liệu - đối tượng miền thừa kế và các phương pháp chung

@Entity 
public class Log { 

} 

@Entity 
public class LogLetter extends Log { 

} 

@Entity 
public class LogAction extends Log { 

} 

và tôi muốn chỉ có một kho lưu trữ cho phép tôi để có được Childs Log của.

Tôi có thể thực hiện điều gì đó giống như vậy không?

public interface LogRepository extends CrudRepository<Log, Long> { 

    @Query("select from ?1) 
    public <T> List<T> getLog(Class<T> clazz); 

} 

và gọi phương pháp này:

List<LogLetter> logLetters = getLog(LogLetters.class); 

tồn tại bất kỳ phương pháp khác để làm những gì tôi đã mô tả?

+0

Tại sao bạn không tạo 'LogLetterRepository' và' LogActionRepository'? Họ có giá rẻ và bạn nhận được 'findAll' miễn phí. –

+1

Hai đối tượng miền này chỉ là một ví dụ, thực ra tôi có 15 đối tượng này và tạo kho lưu trữ mới cho mỗi đối tượng miền không quá thanh lịch. –

Trả lời

2

Tôi không nghĩ rằng nó có thể ra khỏi hộp (đặc biệt là cho thực tế là bạn không thể sử dụng các thông số trong from), nhưng bạn có thể thực hiện nó như một phương pháp tùy chỉnh (xem 1.4. Custom implementations):

public <T> List<T> getLog(Class<T> clazz) { 
    return em.createQuery("from " + clazz.getSimpleName()).getResultList(); 
} 
1

Bạn cũng có thể triển khai bằng cách sử dụng #{#entityName}:

@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1") 
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable); 
Các vấn đề liên quan