Я использую нормальный репозиторий JPA (
Код: Выделить всё
abcDAO.saveAllAndFlush()
Код: Выделить всё
Spring Transaction
Я называю этот контроллер вставки в качестве API REST. /> Ниже приведена модель JPA сущности, которую я пытаюсь вставить, < /p>
Код: Выделить всё
package com.abc.def.xyz.entity;
import org.hibernate.annotations.RowId;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity(name = "TABLE_NAME")
@RowId
@Table(name = "TABLE_NAME", schema = "SCHEMA_NAME")
public class ABCData{
@Id
@Column(name = "unique_id")
private String uniqueId;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
@Column(name = "lastUpdatedOn")
private java.sql.Timestamp lastUpdatedOn;
@Column(name = "lastUpdatedBy")
private String lastUpdatedBy;
@Column(name = "comments")
private String comments;
}
< /code>
Эта модельная сущность не имеет первичного ключа, который генерируется последовательно или любым способом базой данных Oracle, [b]Id
Код: Выделить всё
package com.abc.def;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.statestr.ms.lms.constants.SaveLimitConstants;
import jakarta.persistence.EntityManagerFactory;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "abcEntityMgrFactry",
transactionManagerRef = "abcTrnsctnMngr", basePackages = {"com.abc.def.xyz.repository" })
public class JPARepoConfig {
private final DataSource abcDs;
public JPARepoConfig(DataSource dataSource) {
this.abcDs = dataSource;
}
@Bean
public EntityManagerFactory abcEntityMgrFactry() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false);
Map jpaPropMap = new HashMap();
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.abc.def.xyz.entity");
factory.setDataSource(abcDs);
factory.setJpaPropertyMap(jpaPropMap);
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager abcTrnsctnMngr() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(abcEntityMgrFactry());
return txManager;
}
}
Код: Выделить всё
@Transactional(transactionManager = "abcTrnsctnMngr", rollbackFor = Exception.class)
public String saveAbcData(ABCData abcData) throws SQLException {
try {
abcDao.saveAll(abcData);
}catch(Exception e){
throw new Exception("Excetion -"+e.getMessage());
}
Код: Выделить всё
jpaPropMap.put("hibernate.order_updates",true);
jpaPropMap.put("hibernate.order_inserts",true);
jpaPropMap.put("hibernate.jdbc.batch_size",100);
Подробнее здесь: https://stackoverflow.com/questions/796 ... 00-records