gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:48:18 25 4
gpt4 key购买 nike

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

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

** 更新:如果我添加函数“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

[08/07/16 02:32:20:020 IDT] INFO http.DefaultFilterChainValidator:检查登录 URL '/login' 是否可以通过您的配置访问 [08/07/16 02:32:21:021 IDT] DEBUG 内部。StatisticsInitiator:统计信息已初始化 [enabled=false] [08/07/16 02:32:21:021 IDT] 调试内部.TransactionImpl:开始 [08/07/16 02:32:21:021 IDT] 调试 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(接口(interface))

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>

最佳答案

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

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

-第二次调用上下文时捕获异常

-做一些 boolean 触发检查

-尝试区分哪些上下文被刷新并跳过

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

关于java - Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final - 每次插入重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com