Advertisement
Guest User

Untitled

a guest
Nov 1st, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.75 KB | None | 0 0
  1. @Repository("experimentDao")
  2. @Transactional
  3. public class Dao {
  4. @PersistenceContext
  5. private EntityManager entityManager;
  6.  
  7. @Value("${spring.jpa.properties.hibernate.jdbc.batch_size}")
  8. private int batchSize;
  9.  
  10. public <T extends Entity> void bulkSave(Collection<T> entities) {
  11. int i = 0;
  12. for (Entity entity : entities) {
  13. persistOrMerge(entity);
  14. i++;
  15. if (i % batchSize == 0) {
  16. // Flush a batch of inserts and release memory.
  17. entityManager.flush();
  18. entityManager.clear();
  19. }
  20. }
  21. }
  22.  
  23. private <T extends Entity> void persistOrMerge(T entity) {
  24. if (entity.getId() == null) {
  25. entityManager.persist(entity);
  26. } else {
  27. entityManager.merge(entity);
  28. }
  29. }
  30. }
  31.  
  32. java.lang.IllegalStateException: Failed to execute CommandLineRunner
  33. at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  34. at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  35. at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  36. at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  37. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  38. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  39. at com.example.DemoApplication.main(DemoApplication.java:24) [classes/:na]
  40. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
  41. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
  42. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
  43. at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
  44. at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]
  45. Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.example.entities.Category; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.example.entities.Category
  46. at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:299) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  47. at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  48. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  49. at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  50. at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  51. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  52. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  53. at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  54. at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  55. at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  56. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  57. at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  58. at com.example.Dao$$EnhancerBySpringCGLIB$$79470367.bulkSave(<generated>) ~[classes/:na]
  59. at com.example.DemoApplication.insertWebsites(DemoApplication.java:44) [classes/:na]
  60. at com.example.DemoApplication.run(DemoApplication.java:30) [classes/:na]
  61. at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
  62. ... 11 common frames omitted
  63. Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.example.entities.Category
  64. at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:124) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  65. at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:765) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  66. at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:758) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  67. at org.hibernate.jpa.event.internal.core.JpaPersistEventListener$1.cascade(JpaPersistEventListener.java:80) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
  68. at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  69. at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  70. at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  71. at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  72. at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:425) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  73. at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:249) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  74. at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:178) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  75. at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  76. at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
  77. at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  78. at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  79. at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  80. at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  81. at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  82. at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
  83. at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
  84. at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source) ~[na:na]
  85. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
  86. at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
  87. at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  88. at com.sun.proxy.$Proxy62.persist(Unknown Source) ~[na:na]
  89. at com.example.Dao.persistOrMerge(Dao.java:36) ~[classes/:na]
  90. at com.example.Dao.bulkSave(Dao.java:24) ~[classes/:na]
  91. at com.example.Dao$$FastClassBySpringCGLIB$$2ada4001.invoke(<generated>) ~[classes/:na]
  92. at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  93. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  94. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  95. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  96. ... 21 common frames omitted
  97.  
  98. public abstract class Entity {
  99. public abstract Long getId();
  100. }
  101.  
  102. @javax.persistence.Entity
  103. @Table(name = "websites")
  104. public class Website extends Entity implements Serializable {
  105. @Id
  106. @GeneratedValue(strategy = SEQUENCE)
  107. @Column(name = "website_id")
  108. private Long id;
  109.  
  110. @Column(name = "url", unique = true)
  111. private String url;
  112.  
  113. @OneToOne(cascade = CascadeType.ALL)
  114. @JoinColumn(name="category_id")
  115. private Category category;
  116. // getters and setters, toString
  117. }
  118.  
  119. @javax.persistence.Entity
  120. @Table(name = "categories")
  121. public class Category extends Entity implements Serializable {
  122. @Id
  123. @GeneratedValue(strategy = SEQUENCE)
  124. @Column(name = "category_id")
  125. private Long id;
  126.  
  127. @Column(name = "category_name", unique = true)
  128. private String categoryName;
  129. // getters, setters, toString
  130. }
  131.  
  132. @SpringBootApplication
  133. public class DemoApplication implements CommandLineRunner {
  134.  
  135. private Dao dao;
  136.  
  137. @Autowired
  138. public void setDao(Dao dao) {
  139. this.dao = dao;
  140. }
  141.  
  142. public static void main(String[] args) {
  143. SpringApplication.run(DemoApplication.class, args);
  144. }
  145.  
  146. @Override
  147. public void run(String... strings) throws Exception {
  148. insertWebsites();
  149. }
  150.  
  151. private void insertWebsites() {
  152. List<Website> entities = new ArrayList<>(5000);
  153. Category category = new Category();
  154. category.setCategoryName("my category");
  155.  
  156. for (int i = 0; i < 5000; i++) {
  157. Website website = new Website();
  158. website.setUrl("http://example.com" + i);
  159. website.setCategory(category);
  160. entities.add(website);
  161. }
  162. dao.bulkSave(entities);
  163. }
  164. }
  165.  
  166. spring.datasource.driver-class-name = org.postgresql.Driver
  167. spring.datasource.url = jdbc:postgresql://localhost:5432/spring_web
  168. spring.datasource.username = postgres
  169. spring.datasource.password = postgresql
  170. spring.datasource.type = com.zaxxer.hikari.HikariDataSource
  171.  
  172. # Hibernate
  173. spring.jpa.hibernate.ddl-auto = update
  174. spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL94Dialect
  175. spring.jpa.properties.hibernate.max_fetch_depth = 3
  176. spring.jpa.properties.hibernate.jdbc.fetch_size = 30
  177. spring.jpa.properties.hibernate.jdbc.batch_size = 30
  178. spring.jpa.properties.hibernate.order_inserts = true
  179. spring.jpa.properties.hibernate.order_updates = true
  180. spring.jpa.properties.hibernate.cache.use_second_level_cache = false
  181.  
  182. <?xml version="1.0" encoding="UTF-8"?>
  183. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  184. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  185. <modelVersion>4.0.0</modelVersion>
  186.  
  187. <groupId>com.example</groupId>
  188. <artifactId>demo</artifactId>
  189. <version>0.0.1-SNAPSHOT</version>
  190. <packaging>jar</packaging>
  191.  
  192. <name>demo</name>
  193. <description>Demo project for Spring Boot</description>
  194.  
  195. <parent>
  196. <groupId>org.springframework.boot</groupId>
  197. <artifactId>spring-boot-starter-parent</artifactId>
  198. <version>1.4.1.RELEASE</version>
  199. <relativePath/> <!-- lookup parent from repository -->
  200. </parent>
  201.  
  202. <properties>
  203. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  204. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  205. <java.version>1.8</java.version>
  206. </properties>
  207.  
  208. <dependencies>
  209. <dependency>
  210. <groupId>org.springframework.boot</groupId>
  211. <artifactId>spring-boot-starter-data-jpa</artifactId>
  212. </dependency>
  213. <dependency>
  214. <groupId>org.springframework.boot</groupId>
  215. <artifactId>spring-boot-starter-jdbc</artifactId>
  216. </dependency>
  217.  
  218. <dependency>
  219. <groupId>org.postgresql</groupId>
  220. <artifactId>postgresql</artifactId>
  221. <!--<scope>runtime</scope>-->
  222. </dependency>
  223.  
  224. <dependency>
  225. <groupId>org.springframework.boot</groupId>
  226. <artifactId>spring-boot-starter-test</artifactId>
  227. <scope>test</scope>
  228. </dependency>
  229.  
  230. <dependency>
  231. <groupId>com.zaxxer</groupId>
  232. <artifactId>HikariCP</artifactId>
  233. <version>2.5.1</version>
  234. </dependency>
  235.  
  236. </dependencies>
  237.  
  238. <build>
  239. <plugins>
  240. <plugin>
  241. <groupId>org.springframework.boot</groupId>
  242. <artifactId>spring-boot-maven-plugin</artifactId>
  243. </plugin>
  244. </plugins>
  245. </build>
  246. </project>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement