2013-04-20 207 views
0

我使用Primefaces 3.5對象+ hibernate的4.2.0更新在休眠

我使用primefaces的cell editing table和想更新我的產品表我的數據庫,當我點擊一個字段,改變我的表值。然而,我只發現這樣的休眠簡單屬性的更新方法是這樣的:

EntityManager entityManager = entityManagerFactory.createEntityManager(); 
entityManager.getTransaction().begin(); 

String jpqlUpdate = "update Customer set name = :newName where name = :oldName" 
int updatedEntities = entityManager.createQuery(jpqlUpdate) 
          .setParameter("newName", newName) 
          .setParameter("oldName", oldName) 
          .executeUpdate(); 
entityManager.getTransaction().commit(); 
entityManager.close(); 

如何更新整個對象,在休眠?

回答

0

你可以試試這個:

DataaccessClass:

public boolean update(YourClass yourObject) { 
    Transaction transaction = null; 
    boolean result = false; 
    try { 
     SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
     Session session = sessionFactory.getCurrentSession(); 
     transaction = session.beginTransaction(); 
     session.update(yourObject); 
     transaction.commit(); 

     result = true; 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
     if (transaction != null) { 
      transaction.rollback(); 
     } 
    } 
    return result; 
} 
public boolean update2(YourClass yourObject) { 
    Transaction transaction = null; 
    int result = -1; 
    try { 
     String sqlQuery = "UPDATE YourTable SET yourColumn1=" + yourObject.value1 
       + ", yourColumn2='" + yourObject.value2 + "' WHERE [some condition]="; 
     SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
     Session session = sessionFactory.getCurrentSession(); 
     transaction = session.beginTransaction(); 
     SQLQuery query = session.createSQLQuery(sqlQuery); 
     result = query.executeUpdate(); 
     transaction.commit(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
     if (transaction != null) { 
      transaction.rollback(); 
     } 
    } 
    return result; 
} 

的hibernate.cfg.xml

<hibernate-configuration> 
<session-factory name="session"> 
    <property name="hibernate.connection.driver_class">[db_driver]</property> 
    <property name="hibernate.connection.url">jdbc:[db_type]://[db_ip]:[db_port]/YourDatabase</property> 
    <property name="hibernate.connection.username">username</property> 
    <property name="hibernate.connection.password">password</property> 
    <property name="hibernate.dialect">[db_dialect]</property> 

    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.format_sql">false</property> 
    <property name="hibernate.current_session_context_class">thread</property> 

    <mapping class="dataaccess.entity.YourClass"/> 

</session-factory> 
</hibernate-configuration> 

HibernateUtil.class

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration; 

public class HibernateUtil { 

private static final SessionFactory sessionFactory; 

static { 
    try { 
     sessionFactory = new AnnotationConfiguration().configure("/hibernate.cfg.xml").buildSessionFactory(); 
    } catch (Throwable ex) { 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
} 
+0

你可以看到[Hibernate Annotations](http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) – navand 2013-04-20 16:02:10

+0

還有一種可能的方式來使用簡單的'update '聲明? – maximus 2013-04-20 16:09:39

+1

你想要的東西是這樣的:Transaction transaction = null; String sqlQuery =「UPDATE YourTable SET yourColumn1 =」+ yourValue1 +「,yourColumn2 ='」+ yourValue2 +''WHERE someCondition「; SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.getCurrentSession(); transaction = session.beginTransaction(); SQLQuery query = session.createSQLQuery(sqlQuery); result = query.executeUpdate();transaction.commit(); – navand 2013-04-20 16:12:53