2015-08-01 2 views
2

Я реализую JPA в своем приложении. Это приложение уже использует Spring, Hibernate SessionFactories (3), сервер Wild Fly с XA Datasource и JTA Transaction Manager.Объект не сохраняется

Чтобы проверить JPA, я устанавливаю его на простой объект, который не связан с каким-либо другим объектом.

Выбор и запрос HQL в порядке, но не сохранение. Моя проблема в том, когда я создаю или обновляю этот объект, а создание и модификация не эффективны, и нет ошибки.

Интересно, не проблема на стороне TransactionManager. я не имеют persistence.xml файл

Услуга:

@Service 
@Transactional(value = "transactionManager") 
public class UtilisateurServiceImpl implements UtilisateurService { 

     @Autowired 
     private UtilisateurDao utilisateurDAO; 

     public UtilisateurServiceImpl() { 
     } 
... 

public void creerUser() { 
      utilisateurDAO.creerUser(); 
     } 

} 

дао:

@Repository 
public class UtilisateurDaoImpl implements UtilisateurDao { 

     @PersistenceContext(unitName="habilitationPersistenceUnit") private EntityManager entityManager;  

     public UtilisateurDaoImpl() { 

     } 
... 

     public void creerUser() { 
      UtilisateurEntity utilisateur2 = new UtilisateurEntity(); 
     utilisateur2.setDateCreation(new Date()); 
     utilisateur2.setFax(""); 
     utilisateur2.setIdentifiant("Olivier"); 
     utilisateur2.setPassword("password"); 
     utilisateur2.setMail(""); 
     utilisateur2.setNom("Potonnier"); 
     utilisateur2.setNomAffichage("Olivier Potonnier"); 
     utilisateur2.setPrenom("Olivier"); 
     utilisateur2.setTelephone(""); 
     utilisateur2.setDateMAJ(new Date()); 
     //utilisateur2.setPk(40); 
     try { 
     entityManager.persist(utilisateur2); 
     entityManager.flush(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

//  try { 
//   UtilisateurEntity entity = entityManager.find(UtilisateurEntity.class, 1); 
//   entity.setPassword("password"); 
//   entityManager.merge(entity); 
//  } catch(Exception e) { 
//   e.printStackTrace(); 
//  } 

     } 

Entity:

@Entity @Table(name="UTILISATEUR") 
public class UtilisateurEntity implements Serializable { 
    private static final long serialVersionUID = -3416450676331189345L; 

    @Id @GenericGenerator(name="entityIdGenerator", strategy="com.prima.solutions.primaclaims.core.dao.impl.PkGenerator", 
          parameters={@Parameter(name=PkGenerator.TABLE, value="SEQUENCE"), 
             @Parameter(name=PkGenerator.PK_COLUMN_NAME, value="ENTITE"), 
             @Parameter(name=PkGenerator.PK_COLUMN_VALUE, value="UTILISATEUR"), 
             @Parameter(name=PkGenerator.VALUE_COLUMN_NAME, value="NUMERO") 
          }) 
    @GeneratedValue(generator="entityIdGenerator") 
    private Integer pk; 

     @Column(name="NOM") private String nom; 
     @Column(name="PRENOM") private String prenom; 
     @Column(name="IDENTIFIANT") private String identifiant; 
     @Column(name="PASSWORD") private String password; 
     @Column(name="NOM_AFFICHAGE") private String nomAffichage; 
     @Column(name="TELEPHONE") private String telephone; 
     @Column(name="FAX") private String fax; 
     @Column(name="MAIL") private String mail; 
     @Column(name="DATE_CREATION") private Date dateCreation; 

     @Column(name="DATE_MISE_A_JOUR") private Date dateMAJ; 


     public Integer getPk() { 
      return pk; 
     } 
     public void setPk(Integer pk) { 
      this.pk = pk; 
     } 
    .... 
    } 

Datasource конфиг

<!-- Data sources des differents schema --> 
    <bean id="dataSourceReferentiel" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> 
     <property name="jndiName" value="java:/DS_Referentiel" /> 
     <property name="resourceRef" value="true" /> 
    </bean> 

    <bean id="dataSourceHabilitation" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> 
     <property name="jndiName" value="java:/DS_Habilitation" /> 
     <property name="resourceRef" value="true" /> 
    </bean> 

    <bean id="dataSourceSinistre" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> 
     <property name="jndiName" value="java:/DS_Sinistre" /> 
     <property name="resourceRef" value="true" /> 
    </bean> 

    <!-- Transaction manager --> 
    <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" /> 

Entity менеджеры конфигурации

<bean id="referentielEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="referentielPersistenceUnit" />  
     <property name="dataSource" ref="dataSourceReferentiel" /> 
     <property name="packagesToScan" value="com...entity.referentiel" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <!-- Privilégier les logs debug de org.hibernate.SQL --> 
       <property name="showSql" value="false" /> 
       <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" /> 
      </bean> 
     </property> 
    </bean> 

    <bean id="habilitationEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="habilitationPersistenceUnit" />  
     <property name="dataSource" ref="dataSourceHabilitation" /> 
     <property name="packagesToScan" value="com...entity.habilitation" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <!-- Privilégier les logs debug de org.hibernate.SQL --> 
       <property name="showSql" value="false" /> 
       <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" /> 
      </bean> 
     </property> 
    </bean> 

    <bean id="sinistreEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="sinistrePersistenceUnit" />  
     <property name="dataSource" ref="dataSourceSinistre" /> 
     <property name="packagesToScan" value="com...entity.sinistre" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <!-- Privilégier les logs debug de org.hibernate.SQL --> 
       <property name="showSql" value="false" /> 
       <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" /> 
      </bean> 
     </property> 
    </bean> 
+0

Не могли бы вы разместить конфигурацию спящего режима? –

+0

Опубликовать также свою конфигурацию пружины –

+0

Я обновил начальную запись и установил свой конфиг. Есть особенность, у меня нет файла persistence.xml может быть pb здесь – Anthony

ответ

0

Кажется, я должен был определить persitence.xml, определить объекты и поиск транзакций. С этим (ниже) это работает.

<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_2_0.xsd" 
     version="2.0"> 

    <persistence-unit name="referentielPersistenceUnit" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 
     </properties> 
    </persistence-unit> 

    <persistence-unit name="habilitationPersistenceUnit" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.prima.solutions.primaclaims.core.entity.habilitation.UtilisateurEntity</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 
     </properties> 
    </persistence-unit> 

    <persistence-unit name="sinistrePersistenceUnit" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 
     </properties> 
    </persistence-unit> 

</persistence> 
0

Я просто хочу добавить только одну последнюю вещь на эту тему. Поскольку я использую транзакцию JTA с источником данных XA, я должен объявить файл peristence.xml и установить в JTA-запрос и объявить все.

JTA приносит много ограничений, но если вам это нужно, у вас есть образец здесь. В большинстве случаев предпочитают не использовать JTA, объявления & будут проще.

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