OpenJPA-扩展PersistenceMappingDefaults以将大小写转换为下划线
请注意,openjpa在每列后面都加了“5”。不知道这是从哪里来的。生成的FOO_文件的DDL为:OpenJPA-扩展PersistenceMappingDefaults以将大小写转换为下划线,jpa,openjpa,Jpa,Openjpa,请注意,openjpa在每列后面都加了“5”。不知道这是从哪里来的。生成的FOO_文件的DDL为: org.apache.openjpa.lib.jdbc.ReportingSQLException: Column not found: VERSION5 in statement [INSERT INTO FOO_FILE (file_id, VERSION5, DATETIME05, FILE_NAME5, INPUT_SYSTEM5, IS_END_OF_DAY5, SEQUENCE_NUM
org.apache.openjpa.lib.jdbc.ReportingSQLException: Column not found: VERSION5 in statement [INSERT INTO FOO_FILE (file_id, VERSION5, DATETIME05, FILE_NAME5, INPUT_SYSTEM5, IS_END_OF_DAY5, SEQUENCE_NUMBER5, TOTAL_AMOUNT5, TOTAL_COUNT5, MY_FILE_ID5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] {INSERT INTO FOO_FILE (file_id, VERSION5, DATETIME05, FILE_NAME5, INPUT_SYSTEM5, IS_END_OF_DAY5, SEQUENCE_NUMBER5, TOTAL_AMOUNT5, TOTAL_COUNT5, MY_FILE_ID5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)} [code=-28, state=S0022]
为了再次检查我的逻辑是否错误,我用超类方法(使用匈牙利符号)替换了correctName()
这也失败了
是否有人成功扩展PersistenceMappingDefaults以更改列/表名?在这方面,与Hibernate相比,openjpa似乎太复杂了。它在当前版本的openjpa中工作。请参阅。我已经测试了上面的代码,它适用于OpenJPA2.2.0 已成功将大小写字段名称映射到数据库中的下划线 So字段
私有字符串税率代码>指db列税率
,无需用@列(名称='TAX\u RATE')注释
请记住,persistence.xml需要在
中定义这样的属性:
如果OpenJPA团队能够将此作为一个选项,比如RemoveAnnotation,那将是非常棒的
org.apache.openjpa.lib.jdbc.ReportingSQLException: Column not found: VERSION5 in statement [INSERT INTO FOO_FILE (file_id, VERSION5, DATETIME05, FILE_NAME5, INPUT_SYSTEM5, IS_END_OF_DAY5, SEQUENCE_NUMBER5, TOTAL_AMOUNT5, TOTAL_COUNT5, MY_FILE_ID5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] {INSERT INTO FOO_FILE (file_id, VERSION5, DATETIME05, FILE_NAME5, INPUT_SYSTEM5, IS_END_OF_DAY5, SEQUENCE_NUMBER5, TOTAL_AMOUNT5, TOTAL_COUNT5, MY_FILE_ID5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)} [code=-28, state=S0022]
CREATE TABLE FOO_FILE (file_id BIGINT NOT NULL, VERSION INTEGER, DATETIME0 TIME, FILE_NAME VARCHAR(100), INPUT_SYSTEM VARCHAR(3), IS_END_OF_DAY BIT, SEQUENCE_NUMBER BIGINT, TOTAL_AMOUNT NUMERIC, TOTAL_COUNT INTEGER, MY_FILE_ID VARCHAR(255), PRIMARY KEY (file_id))
protected void correctName(Table table, Column col) {
String name = col.getName();
name = removeHungarianNotation(name);
col.setName(dict.getValidColumnName(name, table));
}
<properties>
<property name="openjpa.jdbc.MappingDefaults"
value="com.myproject.ImprovedMappingDefaults"/>
</properties>