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

时间:2017-05-20 14:59:15

标签: mysql jdo datanucleus

我正在尝试从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的映射,因此可以正确构建Country表的FK引用。

但有一个问题。在生成的SQL脚本中,索引部分将模式名称作为索引名称本身的一部分,这使整个脚本失败。这是一块:

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

请注意索引GEOGMST_STATE_N49部分中的架构名称。名。

我尝试将架构和目录名称设置为空白,但这会产生一个仍然失败的'。MST_STATE_N49

我在数据核JDO 3.1上使用5.1.42版本的JDBC驱动程序(是的,不是最新版本)使用MySQL Server 5.7.17

有关如何在生成的DDL中删除架构/目录名称的任何提示?

2 个答案:

答案 0 :(得分:1)

你为什么要放置" datanucleus.mapping.Schema"什么时候使用MySQL? MySQL看起来并没有使用架构。同样地," datanucleus.mapping.Catalog"由您的URL有效定义! MySQL实际上只支持JDBC目录,映射到"数据库",按照post。由于DataNucleus只使用JDBC驱动程序,因此目录是唯一有用的输入。

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

答案 1 :(得分:0)

在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条评论)。