JPA中Entity实体类@Table注解schema属性失效

最近的工作项目中需要查询mysql数据库中的多个schema,使用的数据库框架是jpa,想当然的认为在实体类@Table注解的schema属性里面填上对应的schema名称,就可以正确访问到对应的schema里的表。然而实际上总是会访问到默认的schema,也就是填写数据库url时所指定的。(这里我想要访问的schema和默认的schema里存在同名同结构的表,所以并没有报错,如果不存在则会提示相应错误)

接下来了解了一下@Table注解的schema属性的机制,会将查询涉及到的表名翻译成schema.tablename,再将转换过后的SQL传给数据库执行。但是当我们自己写查询语句,并且使用了nativeQuery = true时,程序会直接将所写的查询语句传给数据库,因此如果没有自己手动在表名前指定schema,则会访问默认的schema。这也是我一开始出错的原因。

解决方法:不使用nativeQuery,或者在写SQL的时候把表名写成schema.tablename的形式

你可能感兴趣的:(数据库,jpa,mysql,hibernate,schema)