提交事务时,我在hibernate和mysql中感到困惑

用户名

我遇到一个问题,当我使用hibernate + spring + mysql将我的数据从页面提交到数据库时,事务未提交。也许我的配置有问题。

以下是我的配置和代码:

1.spring-config.xml(spring的配置)

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/webtest?charset=UTF-8" />
        <property name="user" value="root" />
        <property name="password" value="kevin" />
        <property name="initialPoolSize" value="5"/>
        <property name="minPoolSize" value="5"/>
        <property name="maxPoolSize" value="15" />
        <property name="checkoutTimeout" value="1000" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.kevin" />
        <property name="namingStrategy">
            <bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.hbm2ddl.auto">select</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <!-- <prop key="connection.autocommit">true</prop> -->
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
        <property name="sessionFactory"><ref bean="sessionFactory"/></property>
    </bean>

    <tx:annotation-driven />
</bean>

2.User.java的

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

/**
 *
 *@author kevin
 *@date 2015年5月29日 上午11:24:17
 *
 **/
@Entity
@Table(name="sys_user")
public class User implements Serializable{

    private static final long serialVersionUID = -8693332653054586507L;
    @Id
    @Column(name="user_id")
    private String id;
    @Column(name="user_real_name")
    private String name;
    @Column(name="user_education")
    private String edu;
    getter()setter()...
}

3.UserService.java

@Service
public class UserService {

    @Resource
    private UserDao userDao;

    @org.springframework.transaction.annotation.Transactional
    public boolean createUser(User user) {
        try {
            user.setId(String.valueOf(new Date().getTime()));
            userDao.add(user);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

4,UserDao.java

@Repository
public class UserDao extends BaseDao<User, String>{
    public UserDao() {
        super(User.class);
    }
}

5,BaseDao.java

public abstract class BaseDao<T, PK extends Serializable> {
    private SessionFactory sessionFactory;
    private Class<T> cls;

    public BaseDao(Class<T> t) {
        cls = t;
    }

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    @Resource
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    //@Transactional
    public void add(T t) throws Exception {
        sessionFactory.getCurrentSession().save(t);
        //sessionFactory.getCurrentSession().flush();
    }
}

上面的代码只是一个测试代码,但是不能持久化到数据库中。当然,如果使用session.flush(),它可以提交到数据库,但是我认为这不是一个好方法,因为它不能确保事务的一致性。

所以我很困惑我的测试和代码出了什么问题。

艾伦·海伊(Alan Hay)

当然,如果我使用session.flush(),它可以提交到数据库,但是我认为这不是一个好方法,因为它不能确保事务的一致性。

您声明如果调用flush()一切正常的事实很奇怪,就像flush()!= commit()一样。

通过调用flush()你正在做的是要求JPA提供商写任何未决数据库的更新,现在的事务提交宁当。尽管在某些情况下有必要对flush()进行显式调用,但是通常您不需要这样做,因为JPA提供程序会在尝试提交事务之前刷新所有未决的更新。要注意的关键点是,即使在调用flush之后,您的更新对其他事务也将不可见,直到提交并调用flush不会破坏事务的完整性。

因此,如上所述,您的代码很可能没问题,但是您的问题是误解之一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我对Java中的类和对象的概念感到困惑

来自分类Dev

在同一事务中删除和添加子实体,使nhibernate感到困惑

来自分类Dev

在同一事务中删除和添加子实体,使nhibernate感到困惑

来自分类Dev

AjaxEditableLabel和Validator的行为使我感到困惑

来自分类Dev

AjaxEditableLabel和Validator的行为使我感到困惑

来自分类Dev

与MySQL的NodeJS异步使我感到困惑

来自分类Dev

在vim中折叠代码使我感到困惑

来自分类Dev

我对javascript中的if语句感到困惑

来自分类Dev

在vim中折叠代码使我感到困惑

来自分类Dev

我对 java 中的返回方法感到困惑

来自分类Dev

我对 Sequelize 中的关联感到困惑

来自分类Dev

对汇编中的指针和值感到困惑

来自分类Dev

当我们提供了事务管理API时,为什么在Hibernate中自动提交默认为false?

来自分类Dev

输出| ...使我感到困惑

来自分类Dev

叉子让我感到困惑

来自分类Dev

QT让我感到困惑

来自分类Dev

为什么我感到困惑“当命令在BASH中失败时,退出状态代码为0”

来自分类Dev

对我的BFS磁贴类中的引用和指针感到困惑

来自分类Dev

对我的BFS磁贴类中的引用和指针感到困惑

来自分类Dev

在我的代码中通过引用调用和通过值调用之间感到困惑

来自分类Dev

与Hibernate提交事务时发生ConcurrentModificationException

来自分类Dev

Hibernate在事务提交时删除集合元素

来自分类Dev

Kotlin和泛型构造函数让我感到困惑

来自分类Dev

关于嵌套我的社区和评论感到困惑

来自分类Dev

我对'n'和print('n')之间的区别感到困惑

来自分类Dev

我对Big O表示法和规则感到困惑

来自分类Dev

我对比较和跳装配感到困惑

来自分类Dev

我对行高和边距感到困惑

来自分类Dev

我对Big O表示法和规则感到困惑

Related 相关文章

  1. 1

    我对Java中的类和对象的概念感到困惑

  2. 2

    在同一事务中删除和添加子实体,使nhibernate感到困惑

  3. 3

    在同一事务中删除和添加子实体,使nhibernate感到困惑

  4. 4

    AjaxEditableLabel和Validator的行为使我感到困惑

  5. 5

    AjaxEditableLabel和Validator的行为使我感到困惑

  6. 6

    与MySQL的NodeJS异步使我感到困惑

  7. 7

    在vim中折叠代码使我感到困惑

  8. 8

    我对javascript中的if语句感到困惑

  9. 9

    在vim中折叠代码使我感到困惑

  10. 10

    我对 java 中的返回方法感到困惑

  11. 11

    我对 Sequelize 中的关联感到困惑

  12. 12

    对汇编中的指针和值感到困惑

  13. 13

    当我们提供了事务管理API时,为什么在Hibernate中自动提交默认为false?

  14. 14

    输出| ...使我感到困惑

  15. 15

    叉子让我感到困惑

  16. 16

    QT让我感到困惑

  17. 17

    为什么我感到困惑“当命令在BASH中失败时,退出状态代码为0”

  18. 18

    对我的BFS磁贴类中的引用和指针感到困惑

  19. 19

    对我的BFS磁贴类中的引用和指针感到困惑

  20. 20

    在我的代码中通过引用调用和通过值调用之间感到困惑

  21. 21

    与Hibernate提交事务时发生ConcurrentModificationException

  22. 22

    Hibernate在事务提交时删除集合元素

  23. 23

    Kotlin和泛型构造函数让我感到困惑

  24. 24

    关于嵌套我的社区和评论感到困惑

  25. 25

    我对'n'和print('n')之间的区别感到困惑

  26. 26

    我对Big O表示法和规则感到困惑

  27. 27

    我对比较和跳装配感到困惑

  28. 28

    我对行高和边距感到困惑

  29. 29

    我对Big O表示法和规则感到困惑

热门标签

归档