1. No identifier specified for entity
没有加上@Id注解,而且要正确导包:
正确:
import javax.persistence.*;
错误:
import org.springframework.data.annotation.Id;
2. 使用分页时候,could not extract ResultSet;
报ORA-00933: SQL 命令未正确结束一直报这个错误,
看打印的sql语句是:
SELECT id FROM table OffSET 1 FETCH FIRST 5 ROWS ONLY ;
Spring Boot的版本是2.0.1
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
jpa的版本是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
怀疑是不是版本不统一导致的,将jpa换成2.0.1无果。将spring boot换成1.5.6成功拿到分页数据。
奇怪啊~~~~~~~~~~~~~
又看了下打印出来的sql语句,发现了问题所在。我的oracle是11g,而OffSET 是在12c版本才开始支持。恶心了一天,终于找到问题,终于可以开心的打王者了。
3.使用原生sql,APP端解析成LinkTreeMap而非实体类
解决方案:如图,不要用Object去存放数据,使用JSONObject即可。
4.简单的sql语句,报错ORA-00911: 无效字符。甚是奇怪。执行语句如下:
/**
* 根据用户id获取用户手势密码
* @param userId
* @return
*/
public Object getGesturePasswordById(String userId){
String sql = "select GESTURE_PASSWORD FROM AS_USER WHERE user_id = '"+userId+"' OR user_name = '"+userId+"';";
Query query= entityManager.createNativeQuery(sql);
List<Object> list = query.getResultList();
if (list == null || list.size() == 0) {
return null;
}
return list.get(0);
}
后来经过调试发现sql语句尾部的;不能要,将sql改为
String sql = "select GESTURE_PASSWORD FROM AS_USER WHERE user_id = '"+userId+"' OR user_name = '"+userId+"'";
即可。
网友评论