问题描述:使用JPA创建表,在实体类上加如下注解,在mysql中创建表并创建唯一约束条件,但是在Oracle中创建表后
唯一约束条件却创建不了。
@Table(name="ABCD_ORGMAP", uniqueConstraints = {
@UniqueConstraint(name = "UNIQ_ABCD_ORGMAP_GROUP_REPORTORG",columnNames = {"groupId","reportOrgCode"})
})
public class OrgMap {
....
}
最后发现是唯一约束条件名称过长,oracle里凡是需要命名的对象其标识符默认均不能超过30个字符。
各个数据库标识符长度
今天修改数据库表名,感觉现有的定义列名都无含义。。。修改后被同事告知,列名有点长,怕有的数据库不支持。。
我头一次听说数据库表名和列名长度限制,so搜索下。
数据库-------------表名------------ 字段名
mysql ------------ 64 -------------- 64
oracle--------------30 ---------------30
db2 ----------------128--------------128
access-------------64 ---------------64
mssql -------------128 ------------ 128
都是网上找的,不知道对否,也没时间找它们的文档看了。。好像还看到oracle可以修改最长的限制。。。希望有的看官可以斧正
详细链接
oracle里凡是需要命名的对象其标识符均不能超过30个字符,这是因为数据字典表的与记录这些数据库对象相关信息的系统表相关的字段的数据类型已经定义好了这样的大小。你可以查数据字典,里面有定义,依次为USER_TABLES,USER_TAB_COLUMNS,USER_CONSTRAINTS。例如,USER_TABLES这个系统表视图里对表名这个字段定义的数据类型就是varchar2(30),即这个字段最大只能为30个字节。