为什么简单的select查询返回List 但是在jpa中连接查询返回List
我正在使用jpa的play框架。 我有一个带有2个函数的模型Jobads来查找all()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; }
找到所有()
public static List findall() { @SuppressWarnings("unchecked") List el = JPA.em().createQuery("from Jobads order by id").getResultList(); return el; }
findByLocation()
public static List findByLocation(String location) { List jadList = JPA.em().createQuery("FROM Jobads j join j.city c WHERE c.name LIKE :location ").setParameter("location", "%" + location + "%").getResultList(); return jadList; }
我在我的控制台中打印函数输出findall()工作正常但findByLocation()给我一个exception[ClassCastException:[Ljava.lang.Object; 不能施放给模特。小伙子们]
为什么只在findByLocation()中出现这个问题,这个问题的解决方案是什么?
谢谢
它正在发生,因为没有select子句的HQL查询是如何工作的。 请注意,这些不是有效的JPQL查询。 JPQL使select子句成为必需,并且使用select子句将允许您指定查询返回的内容:
select j from Jobads j join j.city c WHERE c.name LIKE :location
考虑第二个查询返回的内容:由于join
语句,您将拥有一个包含两行的表。 但是,我真的不知道在这种情况下输出的类型是什么,尝试使用它上面的getClass
来查看。
createQuery()
方法接受两个参数,查询和查询结果的类型,因此你可以这样写类型安全查询:
createQuery("FROM Jobads j join j.city c WHERE c.name LIKE :location", Jobads.class);
- 在Java中尝试/捕获
- “java.lang.IllegalArgumentException:uri.getScheme()== null! “使用JavaFX播放音频时出错
- 在Exception上转储变量的状态
- java.lang.ArrayIndexOutOfBoundsException:length = 0; index = 0 – 数据库阅读 – Android
- 正确使用RuntimeException?
- 带有监听器的JavaFX Textfield给出:“java.lang.IllegalArgumentException:start必须<= the end”
- Java绑定exception
- 您是否曾见过Java文件close()抛出exception?
- Android加密“pad block corrupted”exception