6

我有一些域对象:

@Entity
public class Log {

}

@Entity
public class LogLetter extends Log {

}

@Entity
public class LogAction extends Log {

}

而且我只想拥有一个存储库,它可以让我获取 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);

是否存在任何其他方法来做我描述的事情?

4

2 回答 2

2

我认为它不可能开箱即用(特别是考虑到您不能在 中使用参数from),但您可以将其实现为自定义方法(请参阅1.4. 自定义实现):

public <T> List<T> getLog(Class<T> clazz) {
    return em.createQuery("from " + clazz.getSimpleName()).getResultList();
}
于 2012-07-09T11:01:19.497 回答
1

您还可以使用以下方法实现它#{#entityName}

@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1")
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable);
于 2014-11-10T12:59:18.227 回答