我正在尝试从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`);


注意索引名称的GEOGMST_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/

10-11 22:44