Spring 引导模型 Class 仅在使用 Synonym 时访问 Oracle table
Spring Boot Model Class only accessing Oracle table when using Synonym
我有一个 spring 引导应用程序,需要创建一个模型 class 来访问数据库 table。
由于数据库中的权限配置,SELECT 只能使用 table 名称前面的用户名或使用 Oracle 同义词。
在SQL开发者中:
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 的 Public 同义词。
所以上面的最后两个 SELECTS 正在访问同一个 MYTABLE table.
申请中:
@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 工作正常,为什么 @Table(name = "MYUSER.MYTABLE") 会生成“ORA-00942”错误在 SQL 开发人员中?
在应用程序中,唯一有效的方法是使用 Public SYNONYM。
但我不想使用同义词,因为它会导致应用程序维护的混乱和困难,因为名称与实际的 table 名称不同。
谢谢。
注释 @Table(name = "MYTABLE")
不起作用,因为您用来访问数据库的用户可以访问另一个作为默认模式的模式。
注释 @Table(name = "MYUSER.MYTABLE")
不起作用,因为这不是在不同架构中访问 table 的正确语法。您需要使用注解 @Table(name="MYTABLE", schema="MYUSER")
明确说明要使用模式 MYUSER 并在该模式中搜索名为 MYTABLE 的 table。此语法在注释 Table:
的 javadoc 中进行了解释
(Optional) The schema of the table.
Defaults to the default schema for user.
最后一个注释 @Table(name = "MYTABLE_SYNONYM")
因为有人定义了同义词 MYTABLE_SYNONYM 来访问模式 MYUSER 上的 table MYTABLE。从访问数据库的用户的角度来看,这是透明的。
我有一个 spring 引导应用程序,需要创建一个模型 class 来访问数据库 table。
由于数据库中的权限配置,SELECT 只能使用 table 名称前面的用户名或使用 Oracle 同义词。
在SQL开发者中:
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 的 Public 同义词。
所以上面的最后两个 SELECTS 正在访问同一个 MYTABLE table.
申请中:
@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 工作正常,为什么 @Table(name = "MYUSER.MYTABLE") 会生成“ORA-00942”错误在 SQL 开发人员中?
在应用程序中,唯一有效的方法是使用 Public SYNONYM。
但我不想使用同义词,因为它会导致应用程序维护的混乱和困难,因为名称与实际的 table 名称不同。
谢谢。
注释 @Table(name = "MYTABLE")
不起作用,因为您用来访问数据库的用户可以访问另一个作为默认模式的模式。
注释 @Table(name = "MYUSER.MYTABLE")
不起作用,因为这不是在不同架构中访问 table 的正确语法。您需要使用注解 @Table(name="MYTABLE", schema="MYUSER")
明确说明要使用模式 MYUSER 并在该模式中搜索名为 MYTABLE 的 table。此语法在注释 Table:
(Optional) The schema of the table. Defaults to the default schema for user.
最后一个注释 @Table(name = "MYTABLE_SYNONYM")
因为有人定义了同义词 MYTABLE_SYNONYM 来访问模式 MYUSER 上的 table MYTABLE。从访问数据库的用户的角度来看,这是透明的。