如果不加上 table表名的时候 在Oracle 里面自动生成的是 Work_ScheduleAD
    在mybatis里面的是 执行的是时候 是 WORK_SCHEDULE_A_D 遇到大写都加/

    1. @Getter
    2. @Setter
    3. @Entity
    4. @ToString
    5. //@Table(name ="Work_ScheduleAD")
    6. public class WorkScheduleAD extends BaseEntity implements Serializable {
    7. /**
    8. * serialVersionUID.
    9. */
    10. private static final long serialVersionUID = 1L;
    11. /** 排班记录的ID*/
    12. private String workScheduleId;
    13. /** 用户Id */
    14. private String userId;
    15. /** 更改人*/
    16. private String updateBy;
    17. /** 更改时间时间*/
    18. private String lastUpdateDt;
    19. /** 更改类型*/

    image.png

    1. ### The error occurred while setting parameters
    2. ### 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( ?,?,?,?,?,?,?,?,?,?,?,? )
    3. ### Cause: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
    4. ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
    5. at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235)
    6. at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    7. at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
    8. at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
    9. at com.sun.proxy.$Proxy98.insert(Unknown Source)
    10. at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271)
    11. at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
    12. at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
    13. at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
    14. at com.sun.proxy.$Proxy161.insertSelective(Unknown Source)
    15. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    16. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    17. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    18. at java.lang.reflect.Method.invoke(Method.java:498)
    19. Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

    解决方法
    表名不一致
    使用 @Table将表名和Oracle中 对应

    使用JPA自动生成表 在Oracle的名称是 WORKSCHEDULEAD
    JPA的生成规则 需要比较左右的关系 如果左右都是小写 它自己是大写 就加

    源码如下

    1. @Override
    2. public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
    3. return apply(name, jdbcEnvironment);
    4. }
    1. private Identifier apply(Identifier name, JdbcEnvironment jdbcEnvironment) {
    2. if (name == null) {
    3. return null;
    4. }
    5. StringBuilder builder = new StringBuilder(name.getText().replace('.', '_'));
    6. for (int i = 1; i < builder.length() - 1; i++) {
    7. if (isUnderscoreRequired(builder.charAt(i - 1), builder.charAt(i), builder.charAt(i + 1))) {
    8. builder.insert(i++, '_');
    9. }
    10. }
    11. return getIdentifier(builder.toString(), name.isQuoted(), jdbcEnvironment);
    12. }
    1. /**
    2. * Specify whether the database is case sensitive.
    3. * @param jdbcEnvironment the JDBC environment which can be used to determine case
    4. * @return true if the database is case insensitive sensitivity
    5. */
    6. protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) {
    7. return true;
    8. }
    9. private boolean isUnderscoreRequired(char before, char current, char after) {
    10. return Character.isLowerCase(before) && Character.isUpperCase(current) && Character.isLowerCase(after);
    11. }

    使用 tkmybatis 的 时候 将会这个表 的生成解析成 WORK_SCHEDULE_A_D
    tk是遇到 大写 就加

    所有我只能加一个@table 控制一下