sql >> Database >  >> RDS >> Mysql

hibernate, mysql, glassfish v3 en JTA-gegevensbron

Het lijkt erop dat voor uw configuratie containerbeheerde transacties standaard worden gebruikt. In dit geval moet u een manier van transactiesynchronisatie definiëren, zodat de persistentielaag op de hoogte wordt gebracht (en bijvoorbeeld de cache van het 2e niveau kan bijwerken). U moet dus definiëren manager_lookup_class eigenschap als volgt:

// For GlassFish:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
// For WebSpere:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
// For JBoss:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
// For OpenEJB:
hibernate.transaction.manager_lookup_class=org.apache.openejb.hibernate.TransactionManagerLookup

Ook moet u zakelijke methoden die toegang hebben tot de gegevenslaag markeren als 'transactioneel'. Daarvoor moet je ze markeren met @javax.ejb.TransactionAttribute(REQUIRED) (zie hier voor meer informatie over deze annotatie).

U heeft ook de mogelijkheid om over te schakelen naar bean-managed transacties. Je kunt het doen door te zeggen:

hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory

Dan is de boon verantwoordelijk voor het starten/beëindigen van de transactie:

org.hibernate.Session session = ...;
org.hibernate.Transaction tx = null;
try {
    tx = session.beginTransaction();
    session.createQuery(...); // do some staff
    tx.commit();
} catch (HibernateException e)
{
    if (tx != null) {
        tx.rollback();
    }
}



  1. databasevragen in sql

  2. Selectievakje vullen vanuit database met jQuery

  3. MySQL kopieert efficiënt alle records van de ene tabel naar de andere

  4. Waarom is MySQL's standaardsortering latin1_swedish_ci?