Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表_SCHEM vs DatabaseMetaData.getConnection().getSchema()?_Java_Oracle_Hibernate_Jdbc - Fatal编程技术网

Java 表_SCHEM vs DatabaseMetaData.getConnection().getSchema()?

Java 表_SCHEM vs DatabaseMetaData.getConnection().getSchema()?,java,oracle,hibernate,jdbc,Java,Oracle,Hibernate,Jdbc,在wildfly app server中更改数据库模式后,hibernate从旧数据源检索现有表,但在我的新数据源中创建了新表 我删除了一些hibernate源代码。注意到org.hibernate.tool.hbm2ddl.TableMetadata类构造函数参数显示不一致的行为 TableMetadata(ResultSet rs, DatabaseMetaData meta, boolean extras) throws SQLException { this.catalog =

在wildfly app server中更改数据库模式后,hibernate从旧数据源检索现有表,但在我的新数据源中创建了新表

我删除了一些hibernate源代码。注意到org.hibernate.tool.hbm2ddl.TableMetadata类构造函数参数显示不一致的行为

TableMetadata(ResultSet rs, DatabaseMetaData meta, boolean extras) throws SQLException {
    this.catalog = rs.getString("TABLE_CAT");
    this.schema = rs.getString("TABLE_SCHEM");
    this.name = rs.getString("TABLE_NAME");
    this.initColumns(meta);
    if(extras) {
        this.initForeignKeys(meta);
        this.initIndexes(meta);
    }

    String cat = this.catalog == null?"":this.catalog + '.';
    String schem = this.schema == null?"":this.schema + '.';
    LOG.tableFound(cat + schem + this.name);
    LOG.columns(this.columns.keySet());
    if(extras) {
        LOG.foreignKeys(this.foreignKeys.keySet());
        LOG.indexes(this.indexes.keySet());
    }

}
为什么rs.getString(“TABLE_SCHEM”)meta.getConnection.getSchema()给出了不同的表模式。
hibernate如何在没有用户名和密码信息的情况下访问我的旧模式


怎么可能呢

当然,他们可以退回不同的东西
Connection.getSchema()
返回连接的当前架构
TABLE_SCHEM
是创建表的架构。这可能是两件完全不同的事情。另外:您使用的是哪种DBMS?Oracle中的Oracle Database 12c,12.1.0.2.0版
getSchema()
返回当前用户名(除非使用
alter session
更改了当前模式)。默认情况下,Oracle允许用户列出其他用户的表(例如通过
DatabaseMetadata.getTables()
),但您将无法访问它们。正如您所说,我的数据库允许我的用户名列出其他用户的表。对于解决方案,修复了持久性级别的问题。我在persistence.xml中设置了hibernate.default_schema属性,当然它们可以返回不同的内容
Connection.getSchema()
返回连接的当前架构
TABLE_SCHEM
是创建表的架构。这可能是两件完全不同的事情。另外:您使用的是哪种DBMS?Oracle中的Oracle Database 12c,12.1.0.2.0版
getSchema()
返回当前用户名(除非使用
alter session
更改了当前模式)。默认情况下,Oracle允许用户列出其他用户的表(例如通过
DatabaseMetadata.getTables()
),但您将无法访问它们。正如您所说,我的数据库允许我的用户名列出其他用户的表。对于解决方案,修复了持久性级别的问题。我已经在persistence.xml中设置了hibernate.default_schema属性