jpa查询注意点及异常解决集合

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);

你可能感兴趣的:(jpa查询注意点及异常解决集合)