Spring Boot Model Class只在使用Synonym时访问Oracle表



我有一个spring启动应用程序,需要创建一个访问数据库表的模型类。

由于数据库中的权限配置,SELECT操作只能在表名前加上用户名或使用Oracle同义词。

In 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的公共同义词。

所以上面最后两个select访问的是同一个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 {
....
}

我的问题是为什么@Table(name = "MYUSER.MYTABLE")正在生成"ORA-00942"SELECT * FROM MYUSER出错。MYTABLE工作良好的SQL开发人员?

在应用程序中,它工作的唯一方法是使用公共同义词。

但是我不喜欢使用Synonym,因为它的名称与实际的表名称不同,会给应用程序维护带来混淆和困难。

谢谢。

注释@Table(name = "MYTABLE")不起作用,因为您用来访问数据库的用户可以访问另一个模式作为默认模式。

注释@Table(name = "MYUSER.MYTABLE")不起作用,因为这不是访问不同模式中的表的正确语法。您需要使用注释@Table(name="MYTABLE", schema="MYUSER"),该注释明确表示使用模式MYUSER并在该模式中搜索名为MYTABLE的表。在注释Table的javadoc中解释了这种语法:

(可选)表的模式.默认为user的默认模式。

最后一个注释@Table(name = "MYTABLE_SYNONYM"),因为有人定义了一个同义词MYTABLE_SYNONYM来访问模式MYUSER上的表MYTABLE。从访问数据库的用户的角度来看,这是透明的。

相关内容

  • 没有找到相关文章

最新更新