0

我正在为使用 Spring 的 SimpleJdbcInsert 的代码而苦苦挣扎。

SimpleJdbcInsert jdbcInsert = (new SimpleJdbcInsert(transactionManager.getDataSource())
                .withTableName(MY_TABLE).usingGeneratedKeyColumns("my_table_id")).usingColumns(MY_COLUMNS);

当我在默认模式为“PUBLIC”的连接上使用它时,这很好用,因为我没有设置任何模式。但是,当我添加一些模式,然后将 MY_SCHEMA1 作为连接的默认模式时,这不再起作用。它根本找不到表 MY_TABLE。

如果我将 .withSchemaName(MY_SCHEMA1) 添加到 SimpleJdbcInsert,它就会开始工作。但是,我没有那个选项。

请帮忙。

注意:我在 H2 和 DB2 上使用它。

4

2 回答 2

0

在任意时间动态调用诸如 withSchemaName() 和 useColumns() 之类的方法是对诸如 SimpleJdbcInsert 之类的“查询构建器”类有用性的主要声明:为什么将它用于常量?

如果您坚持使用最终的 SimpleJdbcInsert 变量,它可以是通用变量(如代码示例中那样编写,没有架构),然后您可以在找到要使用的架构后调用 withSchemaName() 来获取可以执行的完全指定的 SimpleJdbcInsert。

于 2013-11-27T09:59:12.077 回答
0

据我所知,每当将单个数据库划分为多个模式时,您都必须明确指定您指向的模式(无论默认模式如何)。我认为,这就是当您使用 add .withSchemaName(MY_SCHEMA1) 时它可以正常工作的原因。但是,正如您所提到的,您没有此选项,您可以在其他地方指定架构名称,例如在服务器配置文件中,即应用程序的属性文件中。

于 2013-11-27T09:49:15.867 回答