2011-01-03 5 views
2

J'ai un formulaire où je saisis les détails, mais quand je clique sur enregistrer, il n'est pas enregistré dans la base de données ... bien que la table soit créée.Hibernate n'enregistre pas les données dans la base de données?

Mon contact POJO

package your.intermedix.domain; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="USER") 

public class Contact implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private Long id; 
    private String name; 
    private String email; 
    private String lastname; 
    private String designation; 

    @Id 
    @GeneratedValue 
    @Column(name="USER_ID") 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Column(name="DESIGNATION") 
    public String getDesignation(){ 
     return designation; 
    } 

    public void setDesignation(String designation){ 
     this.designation = designation; 
    } 

    @Column(name="EMAIL") 
    public String getEmail(){ 
     return email; 
    } 

    public void setEmail(String email){ 
     this.email = email; 
    } 

    @Column(name="LASTNAME") 
    public String getLastname(){ 
     return lastname; 
    } 

    public void setLastname(String lastname){ 
     this.lastname= lastname; 
    } 

    @Column(name="FIRSTNAME") 
    public String getName(){ 
     return name; 
    } 

    public void setName(String name){ 
     this.name = name; 
    } 


    public String toString() 
    { 
     return "designation = '" + designation + "',email='"+ email +"', lastname='"+ lastname +"', name = '" + name + "'"; 
    } 

} 

Mon application-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<!-- Turn on AspectJ @Configurable support --> 

<context:spring-configured /> 
<context:property-placeholder location="classpath*:*.properties" /> 
<context:component-scan base-package="your.intermedix"/> 
<context:annotation-config/> 
<!-- enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="txManager"/> 

    <!-- a PlatformTransactionManager is still required --> 
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <!-- (this dependency is defined somewhere else) --> 
    <property name="dataSource" ref="myDataSource"/> 
    </bean> 


<!-- Turn on @Autowired, @PostConstruct etc support --> 
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> 
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /> 


    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="myDataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>your.intermedix.domain.Contact</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://127.0.0.1:3306/spring"/> 
     <property name="username" value="monty"/> 
     <property name="password" value="indian"/> 
    </bean> 
</beans> 

Je ne reçois toute sorte d'erreur .... dans la console.

code mis à jour ..

package your.intermedix.services; 

import org.hibernate.SessionFactory; 

import org.springframework.orm.hibernate3.HibernateTemplate; 
import org.springframework.stereotype.Service; 

import your.intermedix.domain.Contact; 
import your.intermedix.services.IContact; 

@Service 
public class ContactSerImpl implements IContact { 

    private HibernateTemplate hibernateTemplate; 

     public void setSessionFactory(SessionFactory sessionFactory) { 
      this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
    } 
      @Transactional 
     public void saveContact(Contact contact) { 
      System.out.println("Hello Guru contact"); 
      System.out.println(contact); 
      hibernateTemplate.saveOrUpdate(contact); 
     } 

     public void hello() { 
      System.out.println("Hello Guru"); 
     } 
} 

Ma classe de service où je les instructions d'impression travaille

+0

Pouvez-vous nous donner le code de sauvegarde? Votre méthode où vous créez votre nouvel objet et l'enregistrez. – Kiva

+0

Vous nous avez montré votre entité et votre configuration, mais vous ne nous avez pas montré la partie pertinente. C'est-à-dire, du code gérant votre formulaire. – darioo

+0

Code mis à jour ... vous pouvez voir – theJava

Répondre

2

Je ne sais pas le framework Spring-Hibernate, mais souvent lorsque les données ne sont pas écrites il Menas est pas flushed au databackend. Ce qui vous donne

System.err.println(hibernateTemplate.getFlushMode()); 
+0

Cette instruction ne s'appelle pas elle-même. – theJava

4

Vous avez besoin d'une transaction en cours. Spring transaction management est le chemin à parcourir si vous utilisez HibernateTemplate. Lisez la documentation. Il est trop longue pour inclure dans une réponse, mais voici en bref:

  • vous devez définir un gestionnaire de transaction comme un grain de printemps
  • vous avez besoin <tx:annotation-driven />
  • vous devez annoter vos méthodes transactionnelles avec @Transactional
+0

J'ai mis à jour mon article principal, où j'ai ajouté le Gestionnaire de transactions et d'autres articles. L'objet ne persiste pas dans la base de données. – theJava

+0

@theJava - vous auriez besoin d'un HibernateTransactionManager – Bozho

+0

I mis à jour avec cela et ne fonctionne pas non plus – theJava

Questions connexes