我将这些API的用法作为读取
registerHibernate类型:用于定义默认的hibernate类型支持。
registerColumnType:用于为给定的类型代码注册类型以及最大列长度。换句话说,registerColumnTypedetaild定义sql类型。
所以,如果我在我的MSSQL方言中声明以下阶段
registerColumnType(Types.NCHAR,1, "nchar(1)");
registerColumnType(Types.NCHAR, "string");
registerHibernateType(Types.NCHAR,1, StandardBasicTypes.CHARACTER.getName());
registerHibernateType(Types.NCHAR, StandardBasicTypes.STRING.getName());
在MSSQL中,这些类型中哪一个优先级更高?
我的方言中也有类似的问题:
registerColumnType(Types.VARCHAR, "nvarchar(MAX)");
registerColumnType(Types.VARCHAR, 4000, "nvarchar($l)");
第一行表示默认映射,第二行定义"加权"映射的最大长度。过程如下:
- Hibernate尝试为您的类型查找所有加权映射
- 如果为您的类型找到任何加权映射,hibernate会尝试找到具有最大容量<=的映射size(在我的例子中是4000<=您列定义的大小)
- 如果找到与您的大小相对应的任何加权映射,则将大小替换为$l参数($l表示长度,$s表示小数位数,$p表示精度)
- 如果没有找到加权映射(没有该类型的加权注册Code或没有最大容量足以包含大小的加权)-返回默认映射(也尝试替换)