| 工作中经常遇到存储大数据类型的字段。怎么确保存储成功,并不报错。 在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做一个排序。那再长的数据量都不担心啦。 |