如果不加上 table表名的时候 在Oracle 里面自动生成的是 Work_ScheduleAD
在mybatis里面的是 执行的是时候 是 WORK_SCHEDULE_A_D 遇到大写都加/
@Getter
@Setter
@Entity
@ToString
//@Table(name ="Work_ScheduleAD")
public class WorkScheduleAD extends BaseEntity implements Serializable {
/**
* serialVersionUID.
*/
private static final long serialVersionUID = 1L;
/** 排班记录的ID*/
private String workScheduleId;
/** 用户Id */
private String userId;
/** 更改人*/
private String updateBy;
/** 更改时间时间*/
private String lastUpdateDt;
/** 更改类型*/
### The error occurred while setting parameters
### SQL: INSERT INTO work_schedule_a_d ( rid,data_time,work_schedule_id,user_id,update_by,last_update_dt,update_type,work_status,start_date,start_time,end_date,end_time ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,? )
### Cause: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
at com.sun.proxy.$Proxy98.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
at com.sun.proxy.$Proxy161.insertSelective(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
解决方法
表名不一致
使用 @Table将表名和Oracle中 对应
使用JPA自动生成表 在Oracle的名称是 WORKSCHEDULEAD
JPA的生成规则 需要比较左右的关系 如果左右都是小写 它自己是大写 就加
源码如下
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return apply(name, jdbcEnvironment);
}
private Identifier apply(Identifier name, JdbcEnvironment jdbcEnvironment) {
if (name == null) {
return null;
}
StringBuilder builder = new StringBuilder(name.getText().replace('.', '_'));
for (int i = 1; i < builder.length() - 1; i++) {
if (isUnderscoreRequired(builder.charAt(i - 1), builder.charAt(i), builder.charAt(i + 1))) {
builder.insert(i++, '_');
}
}
return getIdentifier(builder.toString(), name.isQuoted(), jdbcEnvironment);
}
/**
* Specify whether the database is case sensitive.
* @param jdbcEnvironment the JDBC environment which can be used to determine case
* @return true if the database is case insensitive sensitivity
*/
protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) {
return true;
}
private boolean isUnderscoreRequired(char before, char current, char after) {
return Character.isLowerCase(before) && Character.isUpperCase(current) && Character.isLowerCase(after);
}
使用 tkmybatis 的 时候 将会这个表 的生成解析成 WORK_SCHEDULE_A_D
tk是遇到 大写 就加
所有我只能加一个@table 控制一下