Cla*_*ark 1 performance hibernate playframework
我有两个模型:User和Base.
用户模型:http: //pastebin.com/WdLzBkHJ
基本型号:http: //pastebin.com/tQrEUaSu
首先,我想在Base模型中考虑这种表示法:
@org.hibernate.annotations.Entity(dynamicInsert=true,dynamicUpdate=true)
Run Code Online (Sandbox Code Playgroud)
它不起作用(在SQL Debug中显示Hibernate使用在MySQL中配置为可为空的不必要的列生成查询).请告诉我为什么?我究竟做错了什么?
主要问题是(解析后用户上传基础和字符串在MySQL表中插入的方法):http: //pastebin.com/yG3Mapze
插入非常慢.我有每行70000字符串的文件,我不能等到Hibernate将此字符串插入数据库.最大值我等了30分钟,这不是结束.如果我将使用这样的原始查询:
DB.execute("INSERT INTO bases (user_id,email,password) VALUES (1,'" + email.replaceAll("'", "\'") + "','" + password.replaceAll("'", "\'") + "')");
Run Code Online (Sandbox Code Playgroud)
代替
b.save();
Run Code Online (Sandbox Code Playgroud)
之后,在约10-20秒之后将70000个字符串插入DB完成.所以我无法理解问题出在哪里以及如何解决?
您还可以在上面的方法声明中看到此代码:
@NoTransaction
Run Code Online (Sandbox Code Playgroud)
如果我取消注释,那么我将收到此异常:
@ 689mbad1k请求POST/checker/uploadnewbase的内部服务器错误(500)
JPA错误发生JPA错误(JPA上下文未初始化.JPA实体管理器在应用程序中找到一个或多个使用@ javax.persistence.Entity批注注释的类时自动启动.):
play.exceptions.JPAException:未初始化JPA上下文.当在应用程序中找到使用@ javax.persistence.Entity批注注释的一个或多个类时,JPA实体管理器会自动启动.在play.db.jpa.JPA.get(JPA.java:22)在play.db.jpa.JPA.em(JPA.java:51)在play.db.jpa.JPQL.em(JPQL.java:16 )在play.db.jpa.JPQL.find(JPQL.java:44)在models.User.find(User.java)在controllers.Security.getUser(Security.java:30)在controllers.GlobalController.userStat(GlobalController的.java:21)在play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)在play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476)在play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471)在在Invocation.HTTP请求play.mvc.ActionInvoker.handleBefores(ActionInvoker.java:320)在play.mvc.ActionInvoker.invoke(ActionInvoker.java:140)(玩!)
但是在Play手册中我们可以看到:"如果你想阻止Play完全启动任何事务,你可以用@ play.db.jpa.NoTransaction注释该方法.
要防止所有方法的事务,可以使用@play.db.jpa.NoTransaction注释Controller类."
所以我描述了三个问题:
问题是hibernate会话,必须清除.否则会出现内存和性能问题.您可以在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html中找到一些信息.不幸的是我不知道如何获得HibernateSession.也许你可以获得EntityManager并使用它.但是我对Hibernate和Batch的体验非常令人沮丧,所以我建议你使用你的原始解决方案.
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |