测试,Hibernate的实体
@Entity
@Table(name="user_test")
public class UserTest implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
@Column(name="name")
private String name;
@Column(name="age")
private Integer age;
@Column(name="address")
private String address;
测试接口
@Query(value="select * from UserTest where name = ?",nativeQuery=true)
List<UserTest> queryByNameUseSQL(String name);
使用@Query注解,参数为nativeQuery=true,意思是使用正常的sql语句,如果没有使用nativeQuery=true,那就使用Hibernate语句
Hibernate: select * from UserTest where name = ?
2019-05-28 10:34:31.712 WARN 9232 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1146, SQLState: 42S02
2019-05-28 10:34:31.713 ERROR 9232 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Table 'sbm.usertest' doesn't exist
2019-05-28 10:34:31.744 INFO 9232 --- [ Thread-14] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@fa21b3e: startup date [Tue May 28 10:34:18 CST 2019]; root of context hierarchy
2019-05-28 10:34:31.775 INFO 9232 --- [ Thread-14] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-05-28 10:34:31.785 INFO 9232 --- [ Thread-14] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
异常分析:
说是这个Hibernate语句: select * from UserTest where name = ? 有问题
接着往下看,具体报什么异常(去百度一下)
SQL Error: 1146, SQLState: 42S02
再往下
Table ‘sbm.usertest’ doesn’t exist,说是table不存在,那就把usertest拿去数据库查询一下,看有没有这个表(注:我的是没有的)
解决过程:
回到@Query注解 ,因为使用了参数 nativeQuery=true ,那就是说使用原生SQL语句,那么就不能使用对象作为表名,所以要用真正的表名 user_test
修改一下,再测试