我有两种模式:用户和基地。播放框架,休眠和太慢的插入
用户模式: 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