我正在尝试从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`);
请注意索引GEOG
。MST_STATE_N49
部分中的架构名称。名。
我尝试将架构和目录名称设置为空白,但这会产生一个仍然失败的'。MST_STATE_N49
。
我在数据核JDO 3.1上使用5.1.42版本的JDBC驱动程序(是的,不是最新版本)使用MySQL Server 5.7.17
有关如何在生成的DDL中删除架构/目录名称的任何提示?
答案 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条评论)。