我如何使用Spring Data JPA(Hibernate)ORM映射到我无法直接访问的Oracle模式表?

问题描述 投票:0回答:1

Oracle数据库的版本为12c。我使用ojdbc8连接器。我只被授予访问帐户的权限,我们称其为模式“ USR”。使用USR登录,我可以看到另一个架构的表,我们将其称为架构“ ADM”。我想在架构ADM中使用JPA将其映射为表“ TGT_TABLE”。在USR控制台下,我可以查询“ select * from ADM.TGT_TABLE”以获得正确的结果。现在,我将Entity类编写为:

@Data
@Entity
@Table(name = "ADM.TGT_TABLE") // or @Table(name = "TGT_TABLE") , Neither worked
public class ApiHeaderLogs {
    @Id
    @Column(name = "id")
    String id;
    ....

和我的配置:

spring.jpa.hibernate.ddl-auto=none

# Oracle settings
spring.datasource.url=jdbc:oracle:thin:@10.119.125.70:1540:dhtlm4
spring.datasource.username=USR
spring.datasource.password=******
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

和我的测试:

Optional<ApiHeaderLogsEntity> ahl = apiHeaderLogsService.findById(id);

我有错误:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
....
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

并且控制台中的SQL查询为:

select ... from adm_tgt_table where ... //@Table(name = "ADM.TGT_TABLE")

select ... from tgt_table where ... //@Table(name = "TGT_TABLE")

显然,它不解决表ADM.TGT_TABLE。如何映射到ADM.TGT_TABLE?我的经验主要是在MySQL上,它没有与模式访问相关的帐户,我的同事已经提出了直接使用JDBC的解决方案...我真的想避免,请告诉我是否有适当的方法来处理此问题,谢谢

oracle orm spring-data-jpa schema access
1个回答
0
投票

您必须在table_name批注中明确定义schema @Table

示例

 @Table(name="TGT_TABLE", schema="ADM")

请参阅javax.persistence.Table中的文档

省略模式会假定连接会话是默认所有者,这会导致错误。

您都不能将限定名(ADM.TGT_TABLE)作为表名传递。

© www.soinside.com 2019 - 2024. All rights reserved.