生成数据核 JDO 模式时创建索引语句中的模式名称

Schema name in Create index statement while generating datanucleus JDO schema

我正在尝试从 DataNucleus SchemaTool 为 mysql 数据库生成模式,该数据库将存储国家和州。这是该代码的示例:

@PersistenceCapable
Public class State{
    private String shortCode;
    private String fullName;
    @Column(allowsNull = "true",name="country_id")
    private Country countryId;
}

以下是我的 schemaGeneration 属性:

datanucleus.ConnectionDriverName=com.mysql.jdbc.Driver
datanucleus.ConnectionURL=jdbc:mysql://localhost:3306/geog
datanucleus.ConnectionUserName=geog
datanucleus.ConnectionPassword=geogPass
datanucleus.schema.validateTables=true
datanucleus.mapping.Catalog=geog
datanucleus.mapping.Schema=geog

在我的国家 class 中,我也有一个来自集合的映射,因此可以正确构建国家到国家 table 的 FK 引用。

但是有一个问题。在生成的 SQL 脚本中,索引部分将架构名称作为索引名称本身的一部分,这使整个脚本失败。这是那篇文章:

CREATE INDEX `GEOG`.`MST_STATE_N49` ON `GEOG`.`MST_STATE` (`COUNTRY_ID`);

注意索引名称的 GEOG.MST_STATE_N49 部分中的架构名称。

我尝试将模式和目录名称设置为空白,但结果是 ''。MST_STATE_N49 仍然失败。

我正在使用 MySQL Server 5.7.17,在 Data nucleus JDO 3.1

上使用 JDBC 驱动程序的 5.1.42 版本(是的,不是最新的)

关于如何在生成的 DDL 中删除 schema/catalog 名称的任何提示?

在 Neil Stockton 发表上述评论后,我注释掉了这两个属性并且它起作用了。实际上,这是需要的:

datanucleus.ConnectionDriverName=com.mysql.jdbc.Driver
datanucleus.ConnectionURL=jdbc:mysql://localhost:3306/geog
datanucleus.ConnectionUserName=geog
datanucleus.ConnectionPassword=geogPass
datanucleus.schema.validateTables=true 

希望我也能得到另一个问题的答案(我上面的回复评论中的第 2 部分)。

为什么在使用 MySQL 时要输入 "datanucleus.mapping.Schema" ? MySQL 我上次看时没有使用架构。同样,"datanucleus.mapping.Catalog" 是由您的 URL 有效定义的! MySQL 实际上仅支持 JDBC 目录,根据此 post 映射到 "database"。由于 DataNucleus 仅使用 JDBC 驱动程序,因此目录是唯一有用的输入。

因此删除架构和目录属性将默认到正确的位置。