我正在尝试从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
在我的Country类中,我也有一个Collection的映射,以便正确建立State到Country表的FK参考。
但是有一个问题。在生成的SQL脚本中,索引部分将架构名称作为索引名称本身的一部分,这会使整个脚本失效。这是那一块:
CREATE INDEX `GEOG`.`MST_STATE_N49` ON `GEOG`.`MST_STATE` (`COUNTRY_ID`);
注意索引名称的
GEOG
。MST_STATE_N49
部分中的架构名称。我尝试将架构和目录名称设置为空白,但是会产生“。
MST_STATE_N49
”,但仍然失败。我正在使用Data nucleus JDO 3.1上的JDBC驱动程序的5.1.42版本(是,不是最新版本)的MySQL Server 5.7.17
关于如何摆脱生成的DDL中的架构/目录名称的任何提示?
最佳答案
为什么在使用MySQL时放“ datanucleus.mapping.Schema”?我上次查看MySQL时不使用架构。同样,“ datanucleus.mapping.Catalog”由您的URL有效定义! MySQL实际上仅支持JDBC目录,按照此post映射到“数据库”。由于DataNucleus仅使用JDBC驱动程序,因此目录是唯一有用的输入。
因此,删除架构和目录属性将默认到正确的位置。
关于mysql - 生成数据核JDO架构时,创建索引语句中的架构名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44087380/