采用得是Oracle9i数据库,Jboss或Weblogic。 JDBC采用ORACLE9i自带的Class12.jar ------------- 数据库结构: 代码: CREATE TABLE SNCPARAMETERS ( ID NUMBER(19) NOT NULL, SNCID NUMBER(19), NAME VARCHAR2(255), VALUE CLOB ) -------------- BO采用xdoclet建立的: 代码: public class SNCParameters extends BaseObject { /** * Returns the id. * * @return long * @hibernate.id * column = "id" * type = "long" * generator-class = "native" * unsaved-value = "null" */ public Long getId() { return id; } /** * Sets the Id attribute of the SNCParameters object * * @param id The new Id value */ public void setId(Long id) { this.id = id; } /** * Returns the name. * * @return String * * @hibernate.property * column = "name" * type = "string" * not-null = "true" * unique = "false" */ public String getName() { return name; } /** * Sets the Name attribute of the SNCParameters object * * @param name The new Name value */ public void setName(String name) { this.name = name; } /** * Returns the sncId. * * @return Long * * @hibernate.property * column = "sncId" * type = "long" * not-null = "true" * unique = "false" */ public Long getSncId() { return sncId; } /** * Sets the SncId attribute of the SNCParameters object * * @param sncId The new SncId value */ public void setSncId(Long sncId) { this.sncId = sncId; } /** * Returns the values. * * @return Clob * * @hibernate.property * column = "value" * type = "clob" * not-null = "true" * unique = "false" */ public Clob getValue() { return value; } /** * Sets the Values attribute of the SNCParameters object * * @param values The new Values value */ public void setValue(Clob value) { this.value = value; } private Long id; private Long sncId; private String name; private Clob value; private String valueString; public String getValueString() { return valueString; } public void setValueString(String valueString) { this.valueString = valueString; } } 注:valueString并不映射到数据库的CLOB字段,只是方便需要使用这个BO的人用GET、SET 处理这个巨长的CLOB字段 ------------ xdocLet生成的XML文件: 代码: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="com.idncn.mc.bo.SNCParameters" table="SNCParameters" dynamic-update="false" dynamic-insert="false" > <id name="id" column="id" type="long" unsaved-value="null" > <generator class="native"> </generator> </id> <property name="name" type="string" update="true" insert="true" column="name" not-null="true" unique="false" /> <property name="sncId" type="long" update="true" insert="true" column="sncId" not-null="true" unique="false" /> <property name="value" type="clob" update="true" insert="true" column="value" not-null="true" unique="false" /> </class> </hibernate-mapping> -------------------- insert的代码: 代码: public List batchAddSncParameters(List sncParametersList, Long sncId) throws DbAccessException { logger.enterMethod(); List ret = new ArrayList(); try { sess = getSession(); if (sncParametersList != null && sncParametersList.size() > 0) { for (int i = 0; i < sncParametersList.size(); i++) { SNCParameters cp = (SNCParameters) sncParametersList.get(i); long newId = -1; if (cp != null) { SNCParameters cpNew = new SNCParameters(); cpNew.setSncId(sncId); cpNew.setName(cp.getName()); cpNew.setValue(Hibernate.createClob(" ")); newId = ((Long) sess.save(cpNew)).longValue(); sess.flush(); sess.refresh(cpNew, LockMode.UPGRADE); String content = cp.getValueString(); String appserver = System.getProperty("appserver", "jboss"); if (!appserver.equalsIgnoreCase("jboss")) { //weblogic OracleThinClob clob = (OracleThinClob) cpNew.getValue(); Java.io.Writer pw = clob.getCharacterOutputStream(); pw.write(content); pw.flush(); pw.close(); } else { //jboss oracle.sql.CLOB clob = (oracle.sql.CLOB) cpNew.getValue(); java.io.Writer pw = clob.getCharacterOutputStream(); pw.write(content)
|