Java 我在使用Hibernate进行批插入时出错;无法为表“中的标识列插入显式值”&引用;当标识“插入”设置为“关闭”时;
当使用Hibernate通过批插入插入插入数据时,我得到了下面提到的堆栈跟踪(我最初将批大小设置为6) 这是我的实体类BaseUploadEntity.javaJava 我在使用Hibernate进行批插入时出错;无法为表“中的标识列插入显式值”&引用;当标识“插入”设置为“关闭”时;,java,sql-server,hibernate,jdbc,batch-insert,Java,Sql Server,Hibernate,Jdbc,Batch Insert,当使用Hibernate通过批插入插入插入数据时,我得到了下面提到的堆栈跟踪(我最初将批大小设置为6) 这是我的实体类BaseUploadEntity.java package com.spice.vodabaseupload.beans; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persist
package com.spice.vodabaseupload.beans;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="tbl_fresh_base")
public class BaseUploadEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "id_gen")
@SequenceGenerator(name="id_gen",sequenceName = "id_seq_gen")
@Column(name="id")
private long id;
@Column(name="RETAILER_NUMBER")
private String RETAILERNUMBER;
@Column(name="DSE_MOB_NO")
private String DSE_MOB_NO;
@Column(name="DIST_Number")
private String DIST_Number;
@Column(name="TSM_NUMBER")
private String TSM_NUMBER;
@Column(name="ASM_NUMBER")
private String ASM_NUMBER;
@Column(name="ZM_NUMBER")
private String ZM_NUMBER;
@Column(name="CIRCLE_TEAM")
private String CIRCLE_TEAM;
@Column(name="CIRCLE_TEAM1")
private String CIRCLE_TEAM1;
@Column(name="CIRCLE_TEAM2")
private String CIRCLE_TEAM2;
@Column(name="CIRCLE_TEAM3")
private String CIRCLE_TEAM3;
@Column(name="BRAND ")
private String Brand;
@Column(name="UB_COUNT")
private String UB_Count;
//Here are getters and Setters//
}
这是应用程序.properties文件
jdbc.driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url = jdbc:sqlserver://localhost:1433;database=demo
jdbc.username = bgm
jdbc.password = bgm
hibernate.dialect = org.hibernate.dialect.SQLServer2012Dialect
hibernate.show_sql = true
hibernate.format_sql = true
hibernate.hbm2ddl.auto = update
hibernate.jdbc.batch_size = 6
hibernate.order_inserts = true
使用JavaConfig创建SessionFactory如下所示
package com.spice.vodabaseupload.configuration;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan({ "com.spice.vodabaseupload.configuration" })
@PropertySource(value = { "classpath:application.properties" })
public class ProjectConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private Environment environment;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "com.spice.vodabaseupload.beans" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto"));
properties.put("hibernate.jdbc.batch_size", environment.getRequiredProperty("hibernate.jdbc.batch_size"));
properties.put("hibernate.order_inserts", true);
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
}
这是我的baseuploadaoimpl.class
FileInputStream inputStream = new FileInputStream(baseFileToCreate);
Workbook workbook = getRelevantWorkbook(inputStream, baseFileToCreate.toString());
Sheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = firstSheet.iterator();
int count = 0;
while (iterator.hasNext()) {
BaseUploadEntity entity = new BaseUploadEntity();
count++;
Row nextRow = iterator.next();
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if (cell.getColumnIndex() == 0) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setRETAILERNUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setRETAILERNUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 1) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setDSE_MOB_NO(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setDSE_MOB_NO(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 2) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setDIST_Number(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setDIST_Number(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 3) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setTSM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setTSM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 4) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setASM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setASM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 5) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setZM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setZM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 6) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 7) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM1(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM1(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 8) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM2(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM2(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 9) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM3(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM3(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 10) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setBrand(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setBrand(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 11) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setUB_Count(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setUB_Count(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
}
session.save(entity);
if (count % batchSize == 0) {
LOGGER.info("Inserting " + count + " Record");
session.flush();
session.clear();
}
}
inputStream.close();
FileInputStream inputStream=新的FileInputStream(baseFileToCreate);
工作簿工作簿=getRelevantWorkbook(inputStream,baseFileToCreate.toString());
Sheet firstSheet=工作簿。getSheetAt(0);
迭代器迭代器=firstSheet.Iterator();
整数计数=0;
while(iterator.hasNext()){
BaseUploadEntity=新的BaseUploadEntity();
计数++;
行nextRow=iterator.next();
迭代器cellIterator=nextRow.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
if(cell.getColumnIndex()=0){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setRETAILERNUMBER(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setRETAILERNUMBER(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==1){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setDSE_MOB_NO(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setDSE_MOB_NO(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==2){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setDIST_编号(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setDIST_Number(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==3){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setTSM_编号(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setTSM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==4){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setASM_编号(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setASM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()=5){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setZM_编号(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setZM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==6){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setCIRCLE_团队(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setCIRCLE_团队(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==7){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setCIRCLE_TEAM1(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setCIRCLE_TEAM1(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==8){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setCIRCLE_TEAM2(cell.getStringCellValue());
}
else if(cell.getCellType()==cell.cell\u TYPE\u NUMERIC){
entity.setCIRCLE_TEAM2(NumberToTextConverter.toText(cell.getNumericCellValue());
}
}
else if(cell.getColumnIndex()==9){
if(cell.getCellType()==cell.cell\u类型\u字符串){
entity.setCIRCLE_团队
FileInputStream inputStream = new FileInputStream(baseFileToCreate);
Workbook workbook = getRelevantWorkbook(inputStream, baseFileToCreate.toString());
Sheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = firstSheet.iterator();
int count = 0;
while (iterator.hasNext()) {
BaseUploadEntity entity = new BaseUploadEntity();
count++;
Row nextRow = iterator.next();
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if (cell.getColumnIndex() == 0) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setRETAILERNUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setRETAILERNUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 1) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setDSE_MOB_NO(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setDSE_MOB_NO(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 2) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setDIST_Number(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setDIST_Number(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 3) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setTSM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setTSM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 4) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setASM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setASM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 5) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setZM_NUMBER(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setZM_NUMBER(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 6) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 7) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM1(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM1(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 8) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM2(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM2(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 9) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setCIRCLE_TEAM3(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setCIRCLE_TEAM3(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 10) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setBrand(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setBrand(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
else if (cell.getColumnIndex() == 11) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
entity.setUB_Count(cell.getStringCellValue());
}
else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
entity.setUB_Count(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
}
}
session.save(entity);
if (count % batchSize == 0) {
LOGGER.info("Inserting " + count + " Record");
session.flush();
session.clear();
}
}
inputStream.close();