@Query:如何手动构建完整的SQL? (Spring JPA)

@Query: How to Build complete SQL manually? (Spring JPA)

我想用 Java 手动构建我的 sql 语句,然后像这样向我的存储库提供最终字符串:

public interface EventRepository extends CrudRepository<Event, Long>{

@Query("?1") 
List<Event> getLatestEventsFiltered(String sql); 
    
}

这不起作用,因为它不符合语法...它说:QuerySyntaxException: unexpected token: ?

但是如何实现我的意图呢?

提前致谢!

你不能用 @Query 注释来做到这一点。

首先,我们必须创建一个自定义接口来声明我们的自定义方法:

public interface EventRepository extends CrudRepository<Event, Long> {
    List<Event> getLatestEventsFiltered(String sql);
}

public interface EventRepositoryCustom {
    List<Event> getLatestEventsFiltered(String sql);
}

接下来,我们将提供 EventRepository 接口的实现:

@Repository
public class EventRepositoryImpl implements EventRepositoryCustom {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<Event> getLatestEventsFiltered(String sql) {
        Query query = entityManager.createNativeQuery(sql, Event.class);
        // You can use alternative query method instead of native query.
        List<Event> resultList = (List<Event>) query.getResultList();
        return resultList;
    }
}

或者,另一种允许您做几乎任何事情的可能性是使用 Specification API。它允许您以编程方式创建,而不是直接 sql 语句。