Spring data - наследование объектов домена и общие методы

у меня есть некоторые объекты домена:

@Entity
public class Log {

}

@Entity
public class LogLetter extends Log {

}

@Entity
public class LogAction extends Log {

}

и я хочу иметь только один репозиторий, который позволяет мне получить детей журнала.

могу ли я сделать слезно что-то вроде этого?

public interface LogRepository extends CrudRepository<Log, Long> {

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

}

и вызвать этот метод:

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

существуют ли другие подходы к тому, что я описал?

2 ответов


Я не думаю, что это возможно "из коробки" (особенно учитывая тот факт, что вы не можете использовать параметры from), но вы можете реализовать его как пользовательский метод (см. 1.4. Пользовательские реализации):

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

вы также можете реализовать это с помощью #{#entityName}:

@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1")
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable);