配置文件<class 
    name="org.model.Customer" 
    table="customers"
    lazy="false"
    dynamic-update="true"
    dynamic-insert="true"
>    <id
        name="id"
        type="java.lang.String"
        column="ID"
    >
    
        <generator class="uuid.hex" />
    </id>    <property
        name="name"
        type="java.lang.String"
        column="NAME"
        length="15"
    />
    <property
        name="sex"
        type="java.lang.String"
        column="SEX"
        length="1"
    />
    <property
        name="description"
        type="java.lang.String"
        column="DESCRIPTION"
        length="65535"
    />    <!-- Associations -->
  
    <!-- bi-directional one-to-many association to Order -->    <set
        name="orders"
        lazy="true"
        inverse="true"
cascade="all"    >
        <key>
            <column name="CUSTOMER_ID" />
        </key>
        
        <one-to-many 
            class="org.model.Order"
        />
    </set></class>java代码:package test;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.model.Customer;public class Test { private static SessionFactory sessionFactory;
static{
sessionFactory = new Configuration().configure().buildSessionFactory();
}


public void createNewCustomer(Customer c){
Session sess = sessionFactory.openSession();
Transaction tx = sess.beginTransaction();
sess.save(c);
tx.commit();
}

public void updateCustomer(Customer c ){
Session sess = sessionFactory.openSession();
Transaction tx = sess.beginTransaction();
sess.update(c);
tx.commit();
}


public static void main(String[] args) {
Test t = new Test();
Customer c = new Customer();
c.setId("8a8482d51d18ec17011d18ec1a750001");
c.setDescription("sdfsdfdsfsdf");
t.updateCustomer(c);
}
}运行结果:
Hibernate: update customers set NAME=?, SEX=?, DESCRIPTION=? where ID=?
应该是update customers set DESCRIPTION=? where ID=? 这样才对吧

解决方案 »

  1.   

    什么错误都没有
    运行显示的sql就是Hibernate: update customers set NAME=?, SEX=?, DESCRIPTION=? where ID=? 这样的
    不知道是什么原因
      

  2.   

    输出结果没错,因为你new了一个Customer c ,你并没有从数据库中load或者get这个实体,所以缓存上没有这个实体,session就根据id更新c中所有的属性
      

  3.   

    那hibernate的更新操作是不相当于先查询(把游离态转换成持久化的),然后进行更新操作呢!
      

  4.   

    不能跨session使用,只能在同一个session域内才有效