在hibernate中插入实体问题

时间:2017-04-21 09:20:21

标签: java spring hibernate spring-mvc java-ee

我目前正在尝试将hibernate与spring集成。我使用dao设计模式和mysql作为数据库。我正在尝试在数据库中添加contacte实体,但它没有添加,也没有显示错误。通过我可以获取联系人列表的方式并通过id获取它,但我无法更新或插入。

这是我的上下文文件

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

这是我的通用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);
    } 




}

这是我的实体档案

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{

}

我的主要

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);

    }

}

1 个答案:

答案 0 :(得分:1)

请添加以下命名空间:

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

并在架构位置:

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

您可以删除(readOnly = false),因为默认情况下它为false

参考: http://springinpractice.com/2008/03/18/annotation-based-transactions-in-spring