使用@Query(value="语句",nativeQuery=true)出现的异常(SQL Error: 1146, SQLState: 42S02)

测试,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 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
修改一下,再测试

你可能感兴趣的:(hibernate,奇形怪状异常专栏,数据库专栏,mysql,sql,@Query,nativeQuery,hibernate)