JPA - сущности не сохранились - PullRequest
2 голосов
/ 02 февраля 2012

Вот мой файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="miniDS" transaction-type="JTA">
    <jta-data-source>java:/miniDS</jta-data-source>

    <class>com.company.model.Ordre</class>

    <properties>
        <!-- Options Hibernate -->
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.default_schema" value="mini" />
                    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
    </properties>
</persistence-unit>

Мой код:

// Create order
Ordre o = new Ordre();
o.setDate(req.getParameter("date"));
o.setMotif(req.getParameter("motif"));

log.info("Ordre: " + o.getDate() + " " + o.getMotif());

OrdreService os = new OrdreService();
os.persist(o);//This method is NOT even called !

// Process application flow here...

OrdreService.java :
public class OrdreService {
private OrdreDAO dao;

public OrdreService() {
    dao = new OrdreDAO();
}

public void persist(Ordre o) {
    System.out.println("Service persist");
    dao.persist(o);
}
     //...
 }

OrdreDAO.java :
public class OrdreDAO {
private EntityManagerFactory emf;
private EntityManager em;

public OrdreDAO() {
    emf = Persistence.createEntityManagerFactory("miniDS");
    em = emf.createEntityManager();
}

public void persist(Ordre o) {
    System.out.println("DAO persist");
    EntityTransaction et = null;

    try {
        et = em.getTransaction();

        et.begin();
        em.persist(o);

        System.out.println("commit ?");

        if (et != null) {
            if (et.isActive()) {
                et.commit();
            }
        }
    } catch (Throwable t) {
        t.printStackTrace();
        if (et != null) {
            if (et.isActive()) {
                et.rollback();
            }
        }
    }
}

 //...
}

OrdreService.persist никогда не вызывается: \ OrdreDAO.persist.

Что происходит с JBoss?

JBoss 5.1.0.GA
Postgresql 8,3
JPA 1

1 Ответ

2 голосов
/ 02 февраля 2012

Когда вы используете '<jta-data-source>', установите тип транзакции JTA в файле persistence.xml:

<persistence-unit name="your_pu_name" transaction-type="JTA">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...