我们在 Web 应用程序中使用 Play Framework 2.1。我们想public
在作为应用程序数据库的 PostgreSQL 数据库中显式设置数据库模式(不是模式)。我该如何设置?
问问题
1691 次
3 回答
3
据我所知,根据我之前的尝试。schema
你应该为你想要的每个模型定义你的名字。它应该是这样的:
import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(schema = "schema2")
public class TableOnSchema2 extends Model {
...
}
也许这个解决方案会做出额外的努力来用模式名称定义每个模型。因为,我不知道是否可以设置配置值来为应用程序指定默认数据库方案。但它对我有用!
希望这会对你有所帮助.. :)
于 2013-04-10T16:09:53.193 回答
2
如果您的表都位于公共架构之外,最好的办法是更改应用程序用户的 search_path:
alter user your_appuser set search_path = 'schema1';
如果您有多个架构,则可以添加所有架构:
alter user your_appuser set search_path = 'schema1,schema2,public';
不要忘记commit
这个声明。该更改仅在用户下次登录后才会生效。现有连接不会受到影响。
于 2013-04-10T16:27:30.930 回答
0
Playframework 2.8.x 使用 Scala 示例:
我们可以在中添加以下条目application.conf
:
db {
# You can declare as many datasources as you want.
# By convention, the default datasource is named `default`
default.driver = org.postgresql.Driver
default.url = "jdbc:postgresql://localhost/postgres?currentSchema=backoffice"
default.username = "user"
default.password = "password"
}
Play 框架将使用这些参数创建一个默认连接池。Postgres 驱动程序基本上能够使用?currentSchema=backoffice
fromversion 9.4
开始在连接 url 中定义默认模式。
一个 Dao 对象可以使用这个数据库,如下所示:
import com.google.inject.Inject
import play.api.db.{DBApi, Database, DefaultDBApi}
class PostgresDao @Inject()(backofficeDB : Database) {
val backofficeDb = backofficeDB
//some more methods
}
于 2020-09-04T07:12:14.177 回答