Hibernate的主键生成方式generator产生问题,ids for this class must be man或could not get next sequence value
hbm.xml文件如下
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="XXX.XML.vo.Newtracking" table="newtracking" schema="SCOTT">
<id name="jobid" type="java.lang.String">
<column name="JOBID" length="16" />
<generator class="assigned">
</generator>
</id>
<property name="jobname" type="java.lang.String">
<column name="JOBNAME" length="20" not-null="true" />
</property>
<property name="zipfilename" type="java.lang.String">
<column name="ZIPFILENAME" length="64" not-null="false" />
</property>
<property name="newhodate" type="java.lang.String">
<column name="NEWHODATE" length="32" not-null="true" />
</property>
<property name="newhbdate" type="java.lang.String">
<column name="NEWHBDATE" length="32" not-null="true" />
</property>
<property name="jobstatus" type="java.lang.String">
<column name="JOBSTATUS" length="16" not-null="false" />
</property>
<property name="csvendor" type="java.lang.String">
<column name="CSVENDOR" length="32" not-null="false" />
</property>
<property name="ctvendor" type="java.lang.String">
<column name="CTVENDOR" length="32" not-null="false" />
</property>
<property name="kovendor" type="java.lang.String">
<column name="KOVENDOR" length="32" not-null="false" />
</property>
<property name="javendor" type="java.lang.String">
<column name="JAVENDOR" length="32" not-null="false" />
</property>
<property name="idvendor" type="java.lang.String">
<column name="IDVENDOR" length="32" not-null="false" />
</property>
<property name="thvendor" type="java.lang.String">
<column name="THVENDOR" length="32" not-null="false" />
</property>
<property name="vivendor" type="java.lang.String">
<column name="VIVENDOR" length="32" not-null="false" />
</property>
<property name="filvendor" type="java.lang.String">
<column name="FILVENDOR" length="32" not-null="false" />
</property>
<property name="product" type="java.lang.String">
<column name="PRODUCT" length="32" not-null="true" />
</property>
<property name="wordcount" type="java.lang.String">
<column name="WORDCOUNT" length="32" not-null="true" />
</property>
<property name="dgrade" type="java.lang.String">
<column name="DGRADE" length="32" not-null="true" />
</property>
<property name="gpm" type="java.lang.String">
<column name="GPM" length="32" not-null="false" />
</property>
<property name="xmlpath" type="java.lang.String">
<column name="XMLPATH" length="128" not-null="true" />
</property>
</class>
</hibernate-mapping>
写VO的类
package XXX.ImportXML.impl;
import java.util.*;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import XXX.ImportXML.dao.ImportXMLDAO;
import XXX.ImportXML.factory.ImportXMLSessionFactory;
import XXX.XML.GetInfoXML;
import XXX.XML.vo.Newtracking;
public class ImportXMLIpml implements ImportXMLDAO {
private Session session;
public ImportXMLIpml()
{
this.session = ImportXMLSessionFactory.getSession() ;
}
public boolean isImport(Newtracking newtracking) {
boolean flag = false;
Transaction tx = session.beginTransaction();
try {
String xmlpath = newtracking.getXmlpath();
GetInfoXML getinfoxml = new GetInfoXML();
Map language = getinfoxml.getInfoXML(xmlpath);
Map info = (Map)language.get("info");
Map LL = (Map)language.get("LC");
//System.out.print(LL);
//System.out.print((String)LL.get("ko"));
//String a = (String)LL.get("zh-TW");
//System.out.print(a);
newtracking.setDgrade((String)info.get("TranslationPriority"));
newtracking.setNewhodate((String)info.get("TranslationDate"));
newtracking.setNewhbdate((String)info.get("ValidationDate"));
newtracking.setJobid((String)info.get("jobid"));
newtracking.setProduct((String)info.get("Product"));
newtracking.setWordcount((String)info.get("WordCount"));
while ("fil".equals(LL.get("fil"))) {
newtracking.setFilvendor("Estrada Jake Irwin");
break;
}
while ("id".equals(LL.get("id"))) {
newtracking.setIdvendor("Bahasa Bagoes");
break;
}
while ("in".equals(LL.get("in"))) {
newtracking.setIdvendor("Bahasa Bagoes");
break;
}
while ("ja".equals(LL.get("ja"))) {
newtracking.setJavendor("Tracom");
break;
}
while ("ko".equals(LL.get("ko"))) {
newtracking.setKovendor("LBT KO");
break;
}
while ("ms".equals(LL.get("ms"))) {
newtracking.setMsvendor("Sophia Jusoff");
break;
}
while ("th".equals(LL.get("th"))) {
newtracking.setThvendor("LBT TH");
break;
}
while ("vi".equals(LL.get("vi"))) {
newtracking.setVivendor("Vincent");
break;
}
while ("zh-CN".equals(LL.get("zh-CN"))) {
newtracking.setCsvendor("Inhouse");
break;
}
while ("zh-TW".equals(LL.get("zh-TW"))) {
newtracking.setCtvendor("LBT TW");
break;
}
while ("zh-HK".equals(LL.get("zh-HK"))) {
newtracking.setCkvendor("LBT HK");
break;
}
session.save(newtracking);
tx.commit();
flag = true;
}
catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
flag = false;
}
finally {
this.session.close();
}
return flag;
}
}
数据库创建脚本
DROP TABLE NewTracking ;
CREATE TABLE NewTracking
(
jobid varchar(16) not null primary key ,
jobname varchar(128) not null ,
zipfilename varchar(128) ,
newhodate varchar(32) not null ,
newhbdate varchar(32) not null ,
jobstatus varchar(16) ,
csvendor varchar(32) ,
ctvendor varchar(32) ,
ckvendor varchar(32) ,
kovendor varchar(32) ,
javendor varchar(32) ,
idvendor varchar(32) ,
thvendor varchar(32) ,
vivendor varchar(32) ,
filvendor varchar(32) ,
msvendor varchar(32) ,
product varchar(32) not null ,
wordcount varchar(32) not null ,
dgrade varchar(32) not null ,
gpm varchar(32) ,
xmlpath varchar(128) not null
) ;
commit ;
用hbm.xml中用assigned的话,会TomCat会报ids for this class must be man
ually assigned before calling save(),如果换用sequence,又会could not get next sequence value,用native也不行,是不是需要在oracle中建一个sequence生成方式,我不太懂,哪位XD指教一下