今天发现了javax.persistence.Table 的一个bug。
-
问题
我在写注解的时候用@Table(schema = “audit”)的时候,只写了shcema,没有写name。运行的时候,一直报表名找不到,@Table根本没有生效。 -
结论
原因是我没有写name这个属性,也就是说要这样写@Table(schema = “audit”, name=“tableName”),原因在下方。 -
过程
网上也没有相关的说法,我只能自己查。我用的是tkmybatis的selectByExample方法。所以我们从这里开始调。
/**
* 通用Mapper接口,Example查询
*
* @param <T> 不能为空
* @author liuzh
*/
@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectByExampleMapper<T> {
/**
* 根据Example条件进行查询
*
* @param example
* @return
*/
@SelectProvider(type = ExampleProvider.class, method = "dynamicSQL")
List<T> selectByExample(Object example);
}
找到之后,点进ExampleProvider的selectByExample
/**
* 根据Example查询
*
* @param ms
* @return
*/
public String selectByExample(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
//将返回值修改为实体类型
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder("SELECT ");
if (isCheckExampleEntityClass()) {
sql.append(SqlHelper.exampleCheck(entityClass));
}
sql.append("<if test=\"distinct\">distinct</if>");
//支持查询指定列
sql.append(SqlHelper.exampleSelectColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.exampleWhereClause());
sql.append(SqlHelper.exampleOrderBy(entityClass));
sql.append(SqlHelper.exampleForUpdate());
return sql.toString();
}
因为是找不到表,所以应该是
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
这行或之前出现的问题,点进fromTable
/**
* from tableName - 动态表名
*
* @param entityClass
*