使ç¨Hibernateå° 100 000 æ¡è®°å½æå ¥å°æ°æ®åºçä¸ä¸ªå¾èªç¶çåæ³å¯è½æ¯è¿æ ·ç
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); } tx.commit(); session.close();
è¿æ®µç¨åºå¤§æ¦è¿è¡å° 50 000 æ¡è®°å½å·¦å³ä¼å¤±è´¥å¹¶æåº å
åæº¢åºå¼å¸¸ï¼OutOfMemoryExceptionï¼
ã è¿æ¯å 为 Hibernate ææææ°æå
¥ç 客æ·ï¼Customerï¼
å®ä¾å¨ session级å«çç¼ååºè¿è¡äºç¼åçç¼æ
ã
æä»¬ä¼å¨æ¬ç« åè¯ä½ å¦ä½é¿å æ¤ç±»é®é¢ãé¦å ï¼å¦æä½ è¦æ§è¡æ¹éå¤ç并䏿³è¦è¾¾å°ä¸ä¸ªçæ³çæ§è½ï¼ é£ä¹ä½¿ç¨JDBCçæ¹éï¼batchingï¼åè½æ¯è³å ³éè¦ãå°JDBCçæ¹éæåæ°éï¼batch sizeï¼åæ°è®¾ç½®å°ä¸ä¸ªåéå¼ ï¼æ¯å¦ï¼10-50ä¹é´ï¼ï¼
hibernate.jdbc.batch_size 20
注æ,åè¥ä½ 使ç¨äºidentiy
æ è¯ç¬¦çæå¨,Hibernateå¨JDBC级å«éæçå
³éæå
¥è¯å¥çæ¹éæ§è¡ã
ä½ ä¹å¯è½æ³å¨æ§è¡æ¹éå¤çæ¶å ³éäºçº§ç¼åï¼
hibernate.cache.use_second_level_cache false
使¯ï¼è¿ä¸æ¯ç»å¯¹å¿
é¡»çï¼å 为æä»¬å¯ä»¥æ¾å¼è®¾ç½®CacheMode
æ¥å
³éä¸äºçº§ç¼åç交äºã
妿è¦å°å¾å¤å¯¹è±¡æä¹
åï¼ä½ å¿
é¡»éè¿ç»å¸¸çè°ç¨ flush()
以åç¨åè°ç¨ clear()
æ¥æ§å¶ç¬¬ä¸çº§ç¼åç大å°ã
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); if ( i % 20 == 0 ) { //20, same as the JDBC batch size //flush a batch of inserts and release memory: session.flush(); session.clear(); } } tx.commit(); session.close();