因此,我在名为C##SCOTT的Oracle企业数据库中有一个名为Employee的数据库模式/用户。此架构/用户具有创建表、更新、读取和写入的所有权限。我还有另一个名为C##ORC_READ_ONLY的模式/用户,它被设置为对C##SCOTT模式中的表具有只读权限。如果我想通过C##ORC_READ_ONLY访问数据库,我的application.yml文件看起来像这样:
spring:
datasource:
url: jdbc:oracle:thin:@localhost:1521:orcl
username: C##ORC_READ_ONLY
password: --password goes here--
driver-class-name: oracle.jdbc.OracleDriver
jpa:
database: oracle
show-sql: true
hibernate:
ddl-auto: none
根据我的理解,我只是像这样编码我的实体:
@Data
@ToString
@Entity
@Table(name ="EMPLOYEE", schema="C##ORC_READONLY")
public class Employee {
@Id
@Column(name = "EMPNO")
private Long id;
private String ename;
private String job;
private Long mgr;
private Date hiredate;
private Long sal;
private Long comm;
private Long deptno;
}
。。。回购是这样的:
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
我的演示Web服务的服务部分看起来像这样:
@Service
public class EmployeeService {
@Autowired
EmployeeRepository employeeRepository;
@Autowired
ObjectMapper employeeObjectMapper;
public String getAllEmployeesService( ) throws JsonProcessingException {
List<Employee> employeeArrayList = employeeRepository.findAll();
GetAllEmployeesResponseWrapper getAllEmployeeResponseWrapper = new GetAllEmployeesResponseWrapper(employeeArrayList);
String response = employeeObjectMapper.writeValueAsString(getAllEmployeeResponseWrapper);
return response;
}
}
一切编译正常,没有关于访问的警告或错误发生。但是,如果我尝试将请求消息发送到Web服务,我会抛出一个异常,说找不到表或视图:
ORA-00942: table or view does not exist
现在,如果我将用户名和密码更改为表的实际所有者的模式/用户名……很好用。我必须覆盖存储库中的findAll()
方法才能使其工作吗?还是有什么不对劲的地方?
1条答案
按热度按时间sulc1iza1#
应该区分用户和架构。假设你说
我在Oracle企业数据库中有一个名为C##SCOTT的数据库模式/用户,名为Employee。
和/或
我还有另一个名为C##ORC_READ_ONLY的模式/用户,它被设置为对C##SCOTT模式中的表具有只读权限。
你的实体应该是
代码的其余部分应该保持原样(微小的事情:你不需要
@Repository
通过接口扩展JpaRepository
,因为Spring会自动解析它)。