Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final - 每次都插入重复的行

时间:2016-07-08 11:22:15

标签: java mysql spring hibernate hibernate-mapping

您好, 这个问题有很多版本,但修复它的所有问题都失败了。 每次插入对象时,都会插入重复的数据

我尝试使用“persist(role)”或“saveOrUpdate(role)”更改添加功能,但它不起作用。

**更新:如果我添加fucntion“if(event.getApplicationContext()。getParent()!= null)”它是临时解决方案。

数据库表:

mysql> select * from role;
+----+------------+
| Id | Name       |
+----+------------+
|  1 | ROLE_USER  |
|  2 | ROLE_ADMIN |
|  3 | ROLE_USER  |
|  4 | ROLE_ADMIN |
+----+------------+
4 rows in set (0.00 sec)

可能是什么问题?

Log.log

[08/07/16 02:32:20:020 IDT] INFO http.DefaultFilterChainValidator:检查您的配置是否可以访问登录URL'/ login'     [08/07/16 02:32:21:021 IDT] DEBUG internal.StatisticsInitiator:初始化的统计数据[enabled = false]     [08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl:开始     [08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL:         选择             next_val为id_val         从             用于更新的hibernate_sequence

[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractSaveEventListener: Generated identifier: 1, using strategy: org.hibernate.id.enhanced.SequenceStyleGenerator
[08/07/16 02:32:21:021 IDT]  INFO dao.RoleDAO: RoleEntity saved successfully, RoleEntity Details=com.searcher.entity.RoleEntity@2b55fd75
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: committing
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Processing flush-time cascades
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Dirty checking collections
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: Listing entities:
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: com.searcher.entity.RoleEntity{Id=1, users=null, Name=ROLE_USER}
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    insert 
    into
        role
        (Name, Id) 
    values
        (?, ?)
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.JdbcCoordinatorImpl: HHH000420: Closing un-released batch
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: begin
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    select
        next_val as id_val 
    from
        hibernate_sequence for update

[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractSaveEventListener: Generated identifier: 2, using strategy: org.hibernate.id.enhanced.SequenceStyleGenerator
[08/07/16 02:32:21:021 IDT]  INFO dao.RoleDAO: RoleEntity saved successfully, RoleEntity Details=com.searcher.entity.RoleEntity@6e7f73de
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: committing
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Processing flush-time cascades
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Dirty checking collections
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: Listing entities:
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: com.searcher.entity.RoleEntity{Id=2, users=null, Name=ROLE_ADMIN}
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    insert 
    into
        role
        (Name, Id) 
    values
        (?, ?)
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.JdbcCoordinatorImpl: HHH000420: Closing un-released batch
[08/07/16 02:32:21:021 IDT]  INFO startup.StartupDbDataInit: ------------------------------------------------------
[08/07/16 02:32:21:021 IDT]  INFO startup.StartupDbDataInit: StartupDbDataInit Working!!!!!
[08/07/16 02:32:21:021 IDT]  INFO startup.StartupDbDataInit: ------------------------------------------------------
[08/07/16 02:32:21:021 IDT]  INFO context.ContextLoader: Root WebApplicationContext: initialization completed in 21485 ms
[08/07/16 02:32:21:021 IDT]  INFO servlet.DispatcherServlet: FrameworkServlet 'searcher': initialization started
[08/07/16 02:32:21:021 IDT]  INFO support.XmlWebApplicationContext: Refreshing WebApplicationContext for namespace 'searcher-servlet': startup date [Fri Jul 08 14:32:21 IDT 2016]; parent: Root WebApplicationContext
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: begin
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    select
        next_val as id_val 
    from
        hibernate_sequence for update

[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractSaveEventListener: Generated identifier: 3, using strategy: org.hibernate.id.enhanced.SequenceStyleGenerator
[08/07/16 02:32:21:021 IDT]  INFO dao.RoleDAO: RoleEntity saved successfully, RoleEntity Details=com.searcher.entity.RoleEntity@5cf357d8
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: committing
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Processing flush-time cascades
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Dirty checking collections
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: Listing entities:
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: com.searcher.entity.RoleEntity{Id=3, users=null, Name=ROLE_USER}
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    insert 
    into
        role
        (Name, Id) 
    values
        (?, ?)
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:21:021 IDT] DEBUG internal.JdbcCoordinatorImpl: HHH000420: Closing un-released batch
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: begin
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    select
        next_val as id_val 
    from
        hibernate_sequence for update

[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractSaveEventListener: Generated identifier: 4, using strategy: org.hibernate.id.enhanced.SequenceStyleGenerator
[08/07/16 02:32:21:021 IDT]  INFO dao.RoleDAO: RoleEntity saved successfully, RoleEntity Details=com.searcher.entity.RoleEntity@2fe40fe3
[08/07/16 02:32:21:021 IDT] DEBUG internal.TransactionImpl: committing
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Processing flush-time cascades
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Dirty checking collections
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
[08/07/16 02:32:21:021 IDT] DEBUG internal.AbstractFlushingEventListener: Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: Listing entities:
[08/07/16 02:32:21:021 IDT] DEBUG util.EntityPrinter: com.searcher.entity.RoleEntity{Id=4, users=null, Name=ROLE_ADMIN}
[08/07/16 02:32:21:021 IDT] DEBUG hibernate.SQL: 
    insert 
    into
        role
        (Name, Id) 
    values
        (?, ?)
[08/07/16 02:32:22:022 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:22:022 IDT] DEBUG internal.LogicalConnectionManagedImpl: Initiating JDBC connection release from afterTransaction
[08/07/16 02:32:22:022 IDT] DEBUG internal.JdbcCoordinatorImpl: HHH000420: Closing un-released batch
[08/07/16 02:32:22:022 IDT]  INFO startup.StartupDbDataInit: ------------------------------------------------------
[08/07/16 02:32:22:022 IDT]  INFO startup.StartupDbDataInit: StartupDbDataInit Working!!!!!
[08/07/16 02:32:22:022 IDT]  INFO startup.StartupDbDataInit: ------------------------------------------------------
[08/07/16 02:32:22:022 IDT]  INFO servlet.DispatcherServlet: FrameworkServlet 'searcher': initialization completed in 140 ms

StartupDbDataInit

package com.searcher.startup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import com.searcher.dao.EcommerceDAO;
import com.searcher.dao.RoleDAO;
import com.searcher.dao.UserDAO;
import com.searcher.entity.EcommerceEntity;
import com.searcher.entity.RoleEntity;
import com.searcher.service.RoleService;
import com.searcher.service.RoleServiceImp;

@Component
public class StartupDbDataInit implements ApplicationListener<ContextRefreshedEvent>{

    private static final Logger logger = LoggerFactory.getLogger(StartupDbDataInit.class);

    @Autowired
    private RoleService roleService;

    @Override
    public void onApplicationEvent(final ContextRefreshedEvent event) {
        try{
            // Creatinw Role Entity
            RoleEntity roleUser = new RoleEntity();
            RoleEntity roleAdmin = new RoleEntity();

            roleUser.setName("ROLE_USER");
            roleAdmin.setName("ROLE_ADMIN");

            roleService.add(roleUser);
            roleService.add(roleAdmin);
            logger.info("------------------------------------------------------");
            logger.info("StartupDbDataInit Working!!!!!");
            logger.info("------------------------------------------------------");

            // TODO: Swhatever you need here
            }catch (Exception ex){
                logger.info("StartupDbDataInit Failed!!!!!, SellerEntity Details="+ex.getMessage());
                throw ex;
            }
    }
}

RoleEntity.java:

package com.searcher.entity;

import java.util.Set;

import javax.persistence.*;

@Entity
@Table(name = "role")
public class RoleEntity {

    @Id
    @GeneratedValue
    @Column(name="Id")
    private Long Id;

    @Column(name="Name")
    private String Name;

    @ElementCollection(targetClass=UserEntity.class)
    private Set<UserEntity> users;

    public Long getId() {
        return Id;
    }
    public void setId(Long id) {
        this.Id = id;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        this.Name = name;
    }

    @ManyToMany(mappedBy = "roles")
    public Set<UserEntity> getUsers() {
        return users;
    }
    public void setUsers(Set<UserEntity> users) {
        this.users = users;
    }
}

RoleDAO.java(界面)

package com.searcher.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.searcher.entity.RoleEntity;

@Repository
public interface RoleDAO {
    public void add(RoleEntity role);
    public void edit(RoleEntity role);
    public void deleteById(int id);
    public RoleEntity getRoleById(int id);
    public RoleEntity getRoleByName(String name);
    public List<RoleEntity> getAllRole();
}

RoleDAOImp.java

package com.searcher.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.searcher.entity.RoleEntity;

@Repository
public class RoleImp implements RoleDAO {

    private static final Logger logger = LoggerFactory.getLogger(RoleDAO.class);

    @Autowired
    private SessionFactory sessionFactory;

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

    @Override
    public void add(RoleEntity role) {
        this.sessionFactory.getCurrentSession().saveOrUpdate(role);
        logger.info("RoleEntity saved successfully, RoleEntity Details="+role);
    }

    @Override
    public void edit(RoleEntity role) {
        this.sessionFactory.getCurrentSession().update(role);
        logger.info("RoleEntity updated successfully, RoleEntity Details="+role);
    }

    @Override
    public void deleteById(int id) {
        RoleEntity roleToDelete = getRoleById(id);
        this.sessionFactory.getCurrentSession().delete(roleToDelete);
        logger.info("RoleEntity deleted successfully, RoleEntity Details="+roleToDelete);
    }

    @Override
    public RoleEntity getRoleById(int id) {
        RoleEntity roleReturn = (RoleEntity)this.sessionFactory.getCurrentSession().get(RoleEntity.class, id);

        logger.info("RoleEntity founded successfully, RoleEntity Details="+roleReturn);

        return roleReturn;
    }

    @Override
    public RoleEntity getRoleByName(String name) {
        RoleEntity roleReturn = 
                (RoleEntity)this.sessionFactory.getCurrentSession().createNamedQuery("from role where Name =" + name);

        logger.info("RoleEntity founded successfully, RoleEntity Details="+roleReturn);

        return roleReturn;
    }

    @SuppressWarnings({ "unchecked", "deprecation" })
    @Override
    public List<RoleEntity> getAllRole() {
        List<RoleEntity> roleList = this.sessionFactory.getCurrentSession().createQuery("from role").list();
        logger.info("List<RoleEntity> upload successfully, List<RoleEntity> Details="+roleList.toString());
        return roleList;
    }

}

RoleService.java

package com.searcher.service;

import java.util.List;

import com.searcher.entity.RoleEntity;

public interface RoleService {
    public void add(RoleEntity user);
    public void edit(RoleEntity user);
    public void deleteById(int id);
    public RoleEntity getRoleById(int id);
    public RoleEntity getRoleByName(String name);
    public List<RoleEntity> getAllRole();
}

RoleServiceImp.java

package com.searcher.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.searcher.dao.RoleDAO;
import com.searcher.entity.RoleEntity;

@Service("roleService")
public class RoleServiceImp implements RoleService {

    @Autowired
    private RoleDAO roleDAO;


    public RoleDAO getRoleDAO() {
        return roleDAO;
    }

    public void setRoleDAO(RoleDAO roleDAO) {
        this.roleDAO = roleDAO;
    }

    @Override
    @Transactional
    public void add(RoleEntity role) {

        this.roleDAO.add(role);
    }

    @Override
    @Transactional
    public void edit(RoleEntity role) {
        this.roleDAO.edit(role);
    }

    @Override
    @Transactional
    public void deleteById(int id) {
        this.roleDAO.deleteById(id);
    }

    @Override
    @Transactional
    public RoleEntity getRoleById(int id) {
        return this.roleDAO.getRoleById(id);
    }

    @Override
    @Transactional
    public RoleEntity getRoleByName(String name) {
        return this.roleDAO.getRoleByName(name);
    }

    @Override
    @Transactional
    public List<RoleEntity> getAllRole() {
        return (List<RoleEntity>)this.roleDAO.getAllRole();
    }
}

以下是配置文件:

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
    <display-name>Searcher</display-name>

    <!-- Location of Java @Configuration classes that configure the components that makeup this application -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/appconfig-root.xml</param-value>
    </context-param>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>searcher</servlet-name>
        <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>  

    <servlet-mapping>
        <servlet-name>searcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>  

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--  
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    -->

    <!--  
    <servlet-mapping>
        <servlet-name>searcher</servlet-name>
        <url-pattern>/welcome.jsp</url-pattern>
        <url-pattern>/welcome.html</url-pattern>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>-->


</web-app>

的AppConfig-的ROOT.xml

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

    <import resource="appconfig-mvc.xml"/>

    <import resource="appconfig-data.xml"/>

    <import resource="appconfig-security.xml"/>

    <!-- Scans within the base package of the application for @Component classes to configure as beans -->
    <context:component-scan base-package="com.searcher.*"/>

    <!--<context:property-placeholder location="classpath:application.properties"/>-->

</beans>

的AppConfig-security.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="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
                                http://www.springframework.org/schema/security
                                http://www.springframework.org/schema/security/spring-security-4.1.xsd">

    <http auto-config="true">
        <intercept-url pattern="/" access="hasRole('ROLE_USER')"/>
        <intercept-url pattern="/welcome" access="hasRole('ROLE_USER')"/>
        <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/login?error" username-parameter="username" password-parameter="password"/>
        <logout logout-success-url="/login?logout" />
    </http>

    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="userDetailsServiceImpl">
            <password-encoder ref="encoder"></password-encoder>
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="userDetailsServiceImpl" class="com.searcher.service.UserDetailsServiceImpl"></beans:bean>

    <beans:bean id="encoder"
          class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
        <beans:constructor-arg name="strength" value="11"/>
    </beans:bean>
</beans:beans>

的AppConfig-data.xml中

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">


    <!-- Configure the data source bean -->
    <!-- DataSource -->
    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <beans:property name="url"
            value="jdbc:mysql://localhost:3306/SearcherDB" />
        <beans:property name="username" value="root" />
        <beans:property name="password" value="root" />
    </beans:bean>

    <!-- Hibernate 5 SessionFactory Bean definition -->
    <beans:bean id="hibernate5AnnotatedSessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="annotatedClasses">
            <beans:list>
                <beans:value>com.searcher.entity.RoleEntity</beans:value>
                <beans:value>com.searcher.entity.UserEntity</beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
                <beans:prop key="hibernate.format_sql">true</beans:prop>
                <!-- <beans:prop key="hibernate.hbm2ddl.auto">create</beans:prop>  -->
            </beans:props>
        </beans:property>
    </beans:bean>



    <!-- User -->
    <beans:bean id="userDAO" class="com.searcher.dao.UserImp">
        <beans:property name="sessionFactory" ref="hibernate5AnnotatedSessionFactory" />
    </beans:bean>
    <beans:bean id="userService" class="com.searcher.service.UserServiceImp">
        <beans:property name="userDAO" ref="userDAO"></beans:property>
    </beans:bean>

    <!-- Role -->
    <beans:bean id="roleDAO" class="com.searcher.dao.RoleImp">
        <beans:property name="sessionFactory" ref="hibernate5AnnotatedSessionFactory" />
    </beans:bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- Configure the transaction manager bean -->
    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="hibernate5AnnotatedSessionFactory" />
    </beans:bean>

</beans>

的AppConfig-mvc.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                            http://www.springframework.org/schema/mvc/spring-mvc.xsd 
                            http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd">

    <mvc:annotation-driven/>

    <mvc:resources mapping="/resources/**" location="/resources/"/>

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:validation</value>
            </list>
        </property>
    </bean>

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
        in the /WEB-INF/views directory -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass">
            <value>org.springframework.web.servlet.view.JstlView</value>
        </property>
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean> 


</beans>

1 个答案:

答案 0 :(得分:0)

首先,@Column(unique=true)位于RoleEntity.Name

然后你可以(丑陋的选择,但很快):

第二次调用上下文时的-catch异常

-do boolean fired检查

- 区分刷新的上下文和跳过

@Component    
public class ApplicationStartup implements   ApplicationListener<ContextRefreshedEvent> {
    private static boolean fired = false;    
    @Override    
    public void onApplicationEvent(final ContextRefreshedEvent event) {    
        if (!fired) {
        //Your db inserts go there    
        System.out.println("Something simple like that, could do the job i think.");    
        fired = true;    
        }    
    }    
}