为什么简单 select 查询 returns List<Mymodel> 但在 jpa 中加入查询 return List<Object>

why simple select query returns List<Mymodel> but join query return List<Object> in jpa

我正在使用带有 jpa 的播放框架。我有一个带有 2 个函数的模型 Jobads 到 findall() findByLocation()

我的模型

  public class Jobads {

        @Id
        @Column(name = "id", nullable = false)
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;


        private String title;

        @ManyToOne
        private Jobindistry industry;


        @ManyToMany
        @JoinTable(
                name = "jobads_city",
                joinColumns = {@JoinColumn(name = "jobads_id", referencedColumnName = "id")},
                inverseJoinColumns = {@JoinColumn(name = "city_id", referencedColumnName = "id")})
        private List<City> city;
    }

findall()

 public static List<Jobads> findall() {
            @SuppressWarnings("unchecked")
            List<Jobads> el = JPA.em().createQuery("from Jobads order by id").getResultList();
            return el;
        }

findByLocation()

public static List<Jobads> findByLocation(String location) {
  List<Jobads> jadList = JPA.em().createQuery("FROM Jobads j join j.city c WHERE  c.name LIKE :location  ").setParameter("location", "%" + location + "%").getResultList();

return jadList;

}

我在我的控制台中打印两个函数输出 findall() 工作正常但 findByLocation() 给我一个异常 [ClassCastException: [Ljava.lang.Object;无法转换为 models.Jobads]

为什么这个问题只发生在 findByLocation() 中,这个问题的解决方案是什么??

谢谢

它正在发生,因为这就是没有 select 子句的 HQL 查询的工作方式。请注意,这些不是有效的 JPQL 查询。 JPQL 使 select 子句成为强制性的,使用 select 子句将允许您指定要查询的内容 return:

select j from Jobads j join j.city c WHERE c.name LIKE :location

考虑一下您的第二个查询返回的内容:由于 join 语句,您将有一个包含两行的 table。但是,我真的不知道在这种情况下输出的类型是什么,尝试使用 getClass 看看。

createQuery()方法接受两个参数,query和查询结果的类型,因此可以这样写类型安全的query:

createQuery("FROM Jobads j join j.city c WHERE c.name LIKE :location", Jobads.class);