现在还不知道原因出在哪里!因我hibernate 先查询 ID的最大值!然后进行插入!但是我还没有找到更好的方法 来解决这个问题!所以我自己写了一个 saveDAO()方法,来代替hibernate 自动生成的saveDAO,代码如下:
package com.ccu.util;
public class LeibieDAO extends BaseHibernateDAO {
private static final Log log = LogFactory.getLog(LeibieDAO.class);
public static final String CLASSES_NAME = "classesName";
public void save(Leibie leibie){
String sql = "insert into leibie (classes_name)values('"+leibie.getClassesName()+"')";//由leibie 类获取值
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Connection conn = session.connection(); // 获取hibernate的 Connection
try {
System.out.println(leibie.getClassesName());
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.executeQuery(sql);
tx.commit();
} catch (SQLException e) {
tx.rollback();
e.printStackTrace();
}
finally{
if (conn != null) {
try {
conn.close();
}
catch(SQLException sqlex){
System.err.println(this.getClass().getName() + ".mymethod - 不能关闭数据库连接: " + sqlex.toString());
}
}
}
}
}
现在解决了! 在Google上了一个国外的网站 还有群里的一位兄弟提出来 正好相对!呵呵 真正的原因还是对hibernate没有充分的了解!
<hibernate-mapping>
<class name="com.ccu.util.Leibie" schema="SCOTT" table="LEIBIE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0"/>
<generator class="sequence">
<param name="sequence">SCOTT.LEIBIE_S_ID</param> 就是少了这一句!
SCOTT.LEIBIE_S_ID序列名
</generator>
</id>
<property generated="never" lazy="false" name="classesName" type="java.lang.String">
<column length="200" name="CLASSES_NAME"/>
</property>
</class>
</hibernate-mapping>