为什么我的Hibernate能显示数据,但却不能执行save(),delete(),update方法??...急急急!!
数据操作代码DbOperate.java如下:package hib;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class DbOperate {
SessionFactory sf;
public void getSF(){
sf= new Configuration()
.configure()
.buildSessionFactory();
}
public DbOperate(){
getSF();
}
//显示数据显示方法
public void ShowAlldata(){
Session session=sf.openSession();
Query query=session.createQuery("from Users");
    List list=query.list();
    for(int i=0;i<=list.size();i++){
     Users users=(Users)list.get(i);
     String s="ID:"+users.getId()+"name:"+users.getName()+"sex:"+users.getSex()+"address:"+users.getAddress();
     System.out.println(s);      
    }
    session.close();
}
//显示数据保存方法
public void SaveData(Users us){
Session session=sf.openSession();
Transaction tx=null;
try {
tx=session.beginTransaction();

if(session.get(Users.class, us.getId())!=null){
System.out.println("该用户已经存在");
return;
}
else{
tx=session.beginTransaction();
session.save(us);
tx.commit();
System.out.println("注册成功");
}

} catch (HibernateException e) {
if(tx!=null){
tx.rollback();
e.printStackTrace();
}
}
finally{
session.close();
}
}
//显示数据修改方法
public void UpdateData(Users us){
Session session=sf.openSession();
Transaction tx=null;
try {
tx=session.beginTransaction();
Users user=(Users)session.get(Users.class, us.getId());
if(user==null){
System.out.print("该用户不不存在");
return;
}
else{
user.setId(us.getId());
user.setName(us.getName());
user.setSex(us.getSex());
user.setAddress(us.getAddress());
session.update(user);
tx.commit();
System.out.println("修改成功");

}
} catch (HibernateException  e) {
if(tx!=null){
tx.rollback();
e.printStackTrace();
}
}
finally{
session.close();
}
}
//删除数据方法
public void DeleteData(String userId){
Session session=sf.openSession();
Transaction tx=null;
try {
tx=session.beginTransaction();
Users user=(Users)session.get(Users.class, userId);

if(user==null){
System.out.println("该用户不存在");
return;
}
else{
session.delete(user);
tx.commit();
System.out.println("该用户已删除");

}
} catch ( HibernateException e) {
if(tx!=null){
tx.rollback();
e.printStackTrace();
}
}
finally{
session.close();
}
}
}
hibernate.cfg.xml如下:<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- local connection properties -->
<property name="hibernate.connection.url">
jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=testhib
</property>
<property name="hibernate.connection.driver_class">
com.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password" />
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for DB2 -->
<property name="dialect">
org.hibernate.dialect.DB2Dialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<mapping resource="hib/Users.hbm.xml" />
</session-factory>
</hibernate-configuration>

解决方案 »

  1.   

    就是能显示数据,但不能改!!"是不是你在数据库种没 增 删 改的权限?"是什么意思,不能直接用Hibernate操作吗?
    那要怎样设置权限?请教高手
      

  2.   

    用System.out.println();打印看是否执行过那些语句了。
      

  3.   

    好象不关权限的事吧,sqlserver里用户都有增 删  改  查 的权利的啊.
      

  4.   

    控制台信息如下:log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate: select users0_.id as id0_, users0_.name as name0_, users0_.sex as sex0_, users0_.address as address0_ from users users0_
    ID:lili                                         name:丽丽      sex:女address:广东越秀区
    ID:liming                                       name:李明      sex:男address:广东天河区
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at hib.DbOperate.ShowAlldata(DbOperate.java:25)
    at hib.TestDB.main(TestDB.java:6)