生成数据核 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 驱动程序,因此目录是唯一有用的输入。
因此删除架构和目录属性将默认到正确的位置。
我正在尝试从 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 驱动程序,因此目录是唯一有用的输入。
因此删除架构和目录属性将默认到正确的位置。