2013-04-20 156 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