Java Hibernate查询方法要求在查询中返回所有列?

Java Hibernate查询方法要求在查询中返回所有列?,java,hibernate,hibernate-native-query,Java,Hibernate,Hibernate Native Query,我已经为一个按特定列分组的存储库方法编写了一个本机查询 我不能按id分组,因为那样会破坏分组 @Query(nativeQuery = true, value = "SELECT description, model_year, take_rate, number " + "FROM foo f " + "INNER JOIN bar b " + "ON b.cycle_plan_code = b.cycle_plan_co

我已经为一个按特定列分组的存储库方法编写了一个本机查询

我不能按id分组,因为那样会破坏分组

      @Query(nativeQuery = true, value = "SELECT description, model_year, take_rate, number " +
          "FROM foo f " +
          "INNER JOIN bar b " +
          "ON b.cycle_plan_code = b.cycle_plan_code " +
          "WHERE b.programme = :programme " +
          "AND b.build_event = :buildEvent " +
          "AND f.vehicle_line = :vehicleLine " +
          "GROUP BY description, take_rate, model_year, number")
  List<FooEntity> findAllFooByBar(@Param("vehicleLine") String vehicleLine, @Param("programme") String programme,
                                          @Param("buildEvent") String buildEvent);
当访问存储库方法时,它抛出一个hibernate

o.h.engine.jdbc.spi.SqlExceptionHelper   : Column 'id' not found.
我试图通过将此添加到select子句来破解它

选择0作为id

这会继续进行,但是它会抱怨查询没有返回实体vehicle\u line、model\u year的其他列 我必须将它们全部添加到查询中以使其工作

我在注释中尝试了nullable=true标志,但这不允许我从select子句中省略列

如何返回仅返回我感兴趣的部分列的实体?

尝试使用投影: 声明与所需字段的getter的接口:

public interface SubFooEntity{
String getDescription();
String getModelYear();
Double getTakeRate();
Integers getNumber(); 
}
将存储库方法更改为以下内容:

 @Query("SELECT description, modelYear, takeRate, number " +
      "FROM foo f " +
      "INNER JOIN bar b " +
      "ON b.cyclePlanCode = b.cyclePlanCode " +
      "WHERE b.programme = :programme " +
      "AND b.build_event = :buildEvent " +
      "AND f.vehicle_line = :vehicleLine " +
      "GROUP BY description, takeRate, modelYear, number")


List<SubFooEntity> findAllFooByBar(@Param("vehicleLine") String vehicleLine, @Param("programme") String programme,
                                          @Param("buildEvent") String buildEvent);

更多信息请点击此处:

这很有效,谢谢。请注意,列别名在投影中是敏感的。@Toma很高兴它这样做了。请考虑接受这个答案。谢谢
 @Query("SELECT description, modelYear, takeRate, number " +
      "FROM foo f " +
      "INNER JOIN bar b " +
      "ON b.cyclePlanCode = b.cyclePlanCode " +
      "WHERE b.programme = :programme " +
      "AND b.build_event = :buildEvent " +
      "AND f.vehicle_line = :vehicleLine " +
      "GROUP BY description, takeRate, modelYear, number")


List<SubFooEntity> findAllFooByBar(@Param("vehicleLine") String vehicleLine, @Param("programme") String programme,
                                          @Param("buildEvent") String buildEvent);