【发布时间】:2021-10-31 03:53:18
【问题描述】:
我有一个 spring boot 应用程序,需要创建一个访问数据库表的模型类。
由于数据库中的权限配置,SELECT 只能使用表名前面的用户名或使用 Oracle 同义词。
在 SQL Developer 中:
SELECT * FROM MYTABLE; // This doesn't work - ORA-00942: table or view does not exist
SELECT * FROM MYUSER.MYTABLE; // This works
SELECT * FROM MYTABLE_SYNONYM; // This works
在 Oracle 中,MYTABLE_SYNONYM 是 MYTABLE 的公共同义词。
所以上面最后两个 SELECTS 正在访问同一个 MYTABLE 表。
在应用程序中:
@Entity
//@Table(name = "MYTABLE") // This doesn't work - ORA-00942: table or view does not exist
//@Table(name = "MYUSER.MYTABLE") // This DOESN'T work - ORA-00942: table or view does not exist
@Table(name = "MYTABLE_SYNONYM") // This works
public class MyClass implements Serializable {
....
}
我的问题是,如果 SELECT * FROM MYUSER.MYTABLE 在 SQL Developer 中运行良好,为什么 @Table(name = "MYUSER.MYTABLE") 会生成“ORA-00942”错误?
在应用程序中,唯一的工作方式是使用公共同义词。
但我不喜欢使用同义词,因为它的名称与实际的表名不同,这会给应用程序维护带来混乱和困难。
谢谢。
【问题讨论】:
标签: java spring oracle spring-boot spring-data