簡體   English   中英

冬春季節問題

[英]hibernate and spring inegration problems

我目前正在嘗試將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文件

package biz.picosoft.daoImpl;

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

}

聯系人dao文件

package dao;

import biz.picosoft.entity.Contacte;

public interface ContacteDao extends GenericDao<Contacte> {

}

聯系方式

package biz.picosoft.daoImpl;

import org.springframework.transaction.annotation.Transactional;

import biz.picosoft.entity.Contacte;
import dao.ContacteDao;

@Transactional(readOnly = false)
public class ContacteDaoImpl extends GenericDaoImp<Contacte> implements ContacteDao {

}

實體

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

}

我的主要

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");
        contacteDaoImpl.insert(contacte);

    }

}

你不需要添加@Transactional所有DAO實現批注,如果你已經添加@Transactional注釋上GenericDaoImp ,和其他的東西把@Transactional(readOnly = false)標注在方法哪種方法,你只獲取數據。 這僅是建議,僅在您解決問題后

替換<property name="defaultAutoCommit" value="false" />
<property name="defaultAutoCommit" value="true" />

我已經嘗試過了,它為我工作。

問題可能是您需要啟用注釋支持以及事務。 嘗試將以下內容添加到您的spring xml:

<context:annotation-config/>
<tx:annotation-driven />

僅供參考,您還應該查看: 為什么不推薦使用HibernateTemplate?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM