我有兩種模式:用戶和基地。播放框架,休眠和太慢的插入
用戶模式: http://pastebin.com/WdLzBkHJ
基本型號: http://pastebin.com/tQrEUaSu
起初我希望把你的心在這個符號在基本型號:
@org.hibernate.annotations.Entity(dynamicInsert=true,dynamicUpdate=true)
它不工作(在SQL Debug中顯示Hibernate使用MySQL中配置爲空的不必要的列生成查詢)。請告訴我爲什麼?我究竟做錯了什麼?
而主要的問題是有(方法,其中,用戶上傳鹼和字符串在MySQL表這個基地插入解析後): http://pastebin.com/yG3Mapze
Insertation是很慢的。我有每行70000字符串的文件,我不能等到Hibernate將此字符串插入數據庫。最多我等了30分鐘,那不是結束。 如果我將使用原始查詢,如認爲:
DB.execute("INSERT INTO bases (user_id,email,password) VALUES (1,'" + email.replaceAll("'", "\'") + "','" + password.replaceAll("'", "\'") + "')");
代替
b.save();
70000個字符串是insertation到DB後完成後〜10-20秒。 所以我不明白問題在哪裏以及如何解決?
還可以看到這個代碼上面的方法聲明:
@NoTransaction
如果我取消它,然後我免費獲贈此異常:
@ 689mbad1k 內部服務器錯誤(500),請求POST /檢查器/ uploadnewbase
JPA錯誤 發生JPA錯誤(JPA上下文未初始化當一個或多個類使用@ javax.persistence註釋時,JPA實體管理器自動啓動。實體註釋可在應用程序中找到。):
play.exceptions.JPAException:JPA上下文未初始化。如果在應用程序中找到使用@ javax.persistence.Entity批註註釋的一個或多個類,則JPA實體管理器將自動啓動。 play.db.jpa.JPA.get(JPA.java:22) at play.db.jpa.JPA.em(JPA.java:51) at play.db.jpa.JPQL.em(JPQL。 java:16) at controllers.Security.getUser(Security.java:30) at(在玩家數據庫中的models.User.find(User.java) )play.db.jpa.JPQL.find(JPQL.java:44) at controllers.GlobalController.userStat(GlobalController.java:21) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476) at play.mvc。 ActionInvoker.invokeControllerMethod(ActionInvoker.java:471) at play.mvc.ActionInvoker.handleBefores(ActionInvoker.java:320) at play.mvc.ActionInvoker.invoke(ActionInv oker.java:140) Invocation.HTTP Request(Play!)
但播放手冊中我們可以看到: 「如果你想阻止播放從根本上開始的任何交易,您可以用@ play.db.jpa.NoTransaction註釋方法
爲了防止所有方法的事務,您可以使用@ play.db.jpa.NoTransaction註釋Controller類。「
所以我有我所描述的三個問題:
- 關於在NoTransaction例外。
- 關於使用dynamicInsert = true。
- 關於提高Hibernate的性能,就像我會使用原始查詢一樣。
是的,謝謝我已經閱讀了jboss.org上的批處理,結果令我感到沮喪。插入太慢。所以我正在使用這個循環的原始解決方案。但是我無法理解Hibernate做什麼,除了設置模型屬性以及爲什麼插入如此緩慢。 – purple
順便說一下,你不知道解決方案的動態插入和異常後NoTransaction? – purple
@purple:我不是一個hibernate專家,但據我所知,有很多元信息必須在背景中處理,這些元信息的指數增加。關於你的問題:我不知道。 – niels