2012-02-02 6 views
2

Вот мой persistence.xml:JPA - Сущности не сохраняются

<?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

+0

Лог сообщений будет хороший. Скорее всего, вы можете сказать, чего не хватает, внимательно прочитав –

+0

Я добавил: '', но моя сущность не кажется сохранялось. dao даже не называется – Stephan

+0

попытаться добавить атрибут 'transaction-type =" JTA '' в тег 'persistence-unit' (если вы находитесь в среде JSE (и не JEE), по умолчанию используется' RESOURCE_LOCAL', что нежелательно). – yair

ответ

2

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

<persistence-unit name="your_pu_name" transaction-type="JTA"> 
+0

Я добавил тип транзакции и указав поиск менеджера транзакций, но мои объекты не сохраняются. Я обновил свой пост с помощью кода. – Stephan

+0

Вам нужно будет предоставить код и/или более подробную информацию. Скорее всего, ваши транзакции не совершены. Вы пытаетесь сохранить объекты в EJB? Как ты делаешь это? – Kris

+0

Я создаю entitymanager и использую его для сохранения своих объектов. – Stephan

Смежные вопросы