工作中经常遇到存储大数据类型的字段。怎么确保存储成功,并不报错。 在Oracle Database中,VARCHAR2字段类型,最大值为4000,SQL参考手册中也明确指出VARCHAR2的最大大小为4000,注意此处的最大长度是指字节长度,而不是指字符个数。这个跟参数NLS_LENGTH_SEMANTICS有一定关系,如下所示,当参数NLS_LENGTH_SEMANTICS为字节时,定义的变量长度为字节长度。 一不注意就收到bug库的通知消息。当存储长度超过4000就报ORA-00910 解决办法是什么呢,使用大文本字段,使用复杂,可读性差。一般不建议。我们可以同设计数据库表来解决这个问题。 @Table(name="tb_specification")
public class Specification implements Serializable
/** 主键 规格编号*/
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Longid;
/** 规格名称 */
@Column(name="spec_name")
private StringspecName;
/** 规格属性集合 */
@Transient
private List<SpecificationOption>specificationOptions;
@Table(name="tb_specification_option")
public class SpecificationOption implements Serializable
/** 编号 主键 */
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Longid;
/** 规格选项名称 */
@Column(name="option_json")
private StringoptionJson;
/** 规格id */
@Column(name="spec_id")
private LongspecId;
/** 排序 */
@Column(name="orders")
private Integerorders; | 规格表 | | | | | 规格选项表 | | | | | | | | | | | | | | | 规格ID | 规格名称 | | 主键ID | 规格外键ID | 大数据文本类型 | 排序 | | 1 | 内存 | | 1 | 1 | {["xxxx1":xxxxx],["xxxx2",xxxx], | 1 | | | | | | | 2 | 1 | ["xxxx3":xxxx],["xxxx4":xxxx], | 2 | | | | | | | | | | | 3 | 1 | ["xxxx3":xxxx],["xxxx4":xxxx]} | 3 | | | | | | | | | | | | | | | | | |
代码中使用两个类,做数据封装根据spec_id找到对应的option_json再根据orders做一个排序。那再长的数据量都不担心啦。 |