jpa查询注意点及异常解决集合
2018-08-31 本文已影响0人
linjiajiam
1、当用原生sql写查询语句,并且用以下方法转换查询结果集的时候
dataQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(SeafoodPrice.class));
出现错误:
java.lang.ClassCastException: com.demo.model.User cannot be cast to java.util.Map
则必须查看sql中的select 属性是否和类中声明的一致,尤其是大小写。例如,有一个User类如下:
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "userid")
private String userId;
@Column(name = "username")
private String userName;
.....省略get 、set
}
那么,sql分如下情况
SELECT id, userId, userName from user //正确sql
SELECT id, userId, username from user //错误sql,区别在username
2、查询部分字段,或者查询全部字段
下面方法,可以查询全部字段,也可以查询部分字段
//sql
SELECT id, userId, userName from user //正确
//sql
SELECT id, userId from user //正确
dataQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(User.class));
下面的方法,必须查询全部字段
//sql
SELECT id, userId, userName from user //正确
//sql
SELECT id, userId from user //错误
Query dataQuery = em.createNativeQuery(sqlStr.toString(), User.class);