我有一些域对象:
@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);
是否存在其他方法来完成我所描述的内容?
答案 0 :(得分:2)
我认为开箱即可(特别是考虑到你不能在from
中使用参数),但你可以将其作为自定义方法实现(参见1.4. Custom implementations):
public <T> List<T> getLog(Class<T> clazz) {
return em.createQuery("from " + clazz.getSimpleName()).getResultList();
}
答案 1 :(得分:1)
您也可以使用#{#entityName}
实现它:
@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1")
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable);