2017-04-21 4 views
1

現在、休止状態をspringと統合しようとしています.Daoデザインパターンとmysqlをデータベースとして使用しています。私はデータベース内のcontacteエンティティを追加しようとしているが、追加されていないとエラーが表示されました。私は連絡先のリストを取得し、IDで取得することができますが、私は更新または挿入できませんでした。休止状態でエンティティを挿入する

これはこれは

package biz.picosoft.entity; 

import java.io.Serializable; 

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



@Entity 
@Table(name = "Contacte") 
public class Contacte implements Serializable { 
@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "idContact") 
int idContact; 
@Column(name = "nom") 
String nom; 
@Column(name = "mail") 
String mail; 
@Column(name = "téléphone") 
String téléphone; 
@Column(name = "adresse") 
String adresse; 

public Contacte() { 
    super(); 
} 

public Contacte( String nom, String mail, String téléphone, String adresse) { 
    super(); 

    this.nom = nom; 
    this.mail = mail; 
    this.téléphone = téléphone; 
    this.adresse = adresse; 
} 

public long getIdContact() { 
    return idContact; 
} 


public void setIdContact(int idContact) { 
    this.idContact = idContact; 
} 

public String getNom() { 
    return nom; 
} 

public void setNom(String nom) { 
    this.nom = nom; 
} 

public String getMail() { 
    return mail; 
} 

public void setMail(String mail) { 
    this.mail = mail; 
} 

public String getTéléphone() { 
    return téléphone; 
} 

public void setTéléphone(String téléphone) { 
    this.téléphone = téléphone; 
} 

public String getAdresse() { 
    return adresse; 
} 

public void setAdresse(String adresse) { 
    this.adresse = adresse; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + (int) (idContact^(idContact >>> 32)); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Contacte other = (Contacte) obj; 
    if (idContact != other.idContact) 
     return false; 
    return true; 
} 


} 

私contacteDaoImpファイル

package biz.picosoft.daoImpl; 

import java.util.List; 

import org.springframework.orm.hibernate5.HibernateTemplate; 
import org.springframework.transaction.annotation.Transactional; 

import biz.picosoft.entity.Contacte; 
@Transactional(readOnly=false) 
public class ContacteDaoImpl extends GenericDaoImp<Contacte> implements ContacteDao{ 

} 
私の実体ファイルである、これは私のジェネリックDAOのIMPLある

package biz.picosoft.daoImpl; 

import java.io.Serializable; 
import java.lang.reflect.ParameterizedType; 
import java.lang.reflect.Type; 
import java.util.List; 


import org.springframework.orm.hibernate5.HibernateTemplate; 
import org.springframework.transaction.annotation.Transactional; 

import dao.GenericDao; 
@Transactional(readOnly=false) 
public class GenericDaoImp<T> implements GenericDao<T> { 
    HibernateTemplate template; 

    protected Class<T> daoType; 
    public GenericDaoImp() { 
     Type t = getClass().getGenericSuperclass(); 
     ParameterizedType pt = (ParameterizedType) t; 
     daoType = (Class) pt.getActualTypeArguments()[0]; 
    } 

    public HibernateTemplate getTemplate() { 
     return template; 
    } 

    public void setTemplate(HibernateTemplate template) { 
     this.template = template; 
    } 

    public void insert(T t) { 
     // TODO Auto-generated method stub 
     template.save(t); 

    } 

    public void update(T t) { 
     // TODO Auto-generated method stub 
     template.update(t); 
    } 

    public void delete(T t) { 
     // TODO Auto-generated method stub 
     template.delete(t); 
    } 

    public T findById(Class<T> t, String id) { 
     // TODO Auto-generated method stub 
     return template.get(t, id); 
    } 

    public List<T> findAll() { 
     // TODO Auto-generated method stub 
     return template.loadAll(daoType); 
    } 




} 

私のコンテキストファイル

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


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/mailmaneger" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
     <property name="defaultAutoCommit" value="false" /> 
    </bean> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="mysessionFactory" /> 

    </bean> 
    <bean id="mysessionFactory" 
     class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
      <property name="packagesToScan" value="biz.picosoft.entity"/> 



     <property name="dataSource" ref="dataSource"></property> 


     <property name="hibernateProperties"> 

      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.show_sql">true</prop> 


      </props> 
     </property> 
    </bean> 

    <bean id="template" class="org.springframework.orm.hibernate5.HibernateTemplate"> 
     <property name="sessionFactory" ref="mysessionFactory"></property> 
     <property name="checkWriteOperations" value="false"></property> 
    </bean> 

    <bean id="d" class="biz.picosoft.daoImpl.ContacteDaoImpl"> 
     <property name="template" ref="template"></property> 
    </bean> 

</beans> 

ですあなたは(偽の読み取り専用=)を削除することができ

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 


<!-- This tells Spring to activate annotation-driven transactions --> 
<tx:annotation-driven/> 

理由:

xmlns:tx="http://www.springframework.org/schema/tx" 

とスキーマの場所での:

私のメイン

package biz.picosoft.mains; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.orm.hibernate5.LocalSessionFactoryBean; 

import biz.picosoft.daoImpl.ContacteDaoImpl; 
import biz.picosoft.entity.Contacte; 

public class TestHibernate { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
Contacte contacte=new Contacte("fatma", "test2", "test", "test"); 

ApplicationContext context = 
new ClassPathXmlApplicationContext("applicationContext.xml"); 
contacte.setIdContact (4); 
ContacteDaoImpl contacteDaoImpl=(ContacteDaoImpl) context.getBean("d"); 
System.out.println(contacteDaoImpl.findAll().size()); 
contacteDaoImpl.insert(contacte); 

    } 

} 
+0

ここで、insert文またはupdate文を呼び出していますか? mainメソッドのコードは、すべての詳細をフェッチしています。Contacteオブジェクトを作成するときに、挿入または更新を呼び出さない場合です。 –

+0

いいえinsertallでfindallを変更すると何も得られません –

答えて

1

その名前空間と一緒に以下を追加してください。デフォルトではfalseです。

R e -ference: http://springinpractice.com/2008/03/18/annotation-based-transactions-in-spring

+0

入れ子にされた例外はorg.xml.sax.SAXParseExceptionです。 lineNumber:49; columnNumber:26; cvc-complex-type.2.4.c:

+0

を追加しているときに、このエラーが表示されました。「注釈駆動型」スキーマの場所に実際に 'http://www.springframework.org/schema/tx http:// www.springframework.org/schema/tx/spring-tx.xsd'を追加しましたか? –