关于我之前的问题,我想确保加载所有子对象,因为我有一个可能需要访问数据的多个线程(从而避免延迟加载异常).我知道这样做的方法是在查询中使用"fetch"关键字(EJB QL).像这样:
select distinct o from Order o left join fetch o.orderLines
Run Code Online (Sandbox Code Playgroud)
假设一个模型的Order类中包含一组OrderLines.
我的问题是,似乎需要"distinct"关键字,否则我似乎会Order为每个关键字取回一个OrderLine.我做对了吗?
也许更重要的是,有没有办法拉入所有儿童物品,无论多深?我们有大约10-15个类,对于服务器,我们将需要加载的所有东西......我正在避免使用,FetchType.EAGER因为这意味着它总是渴望,特别是Web前端加载一切 - 但也许这是要走的路 - 是你做什么?我似乎记得我们之前尝试过这个,然后得到非常慢的网页 - 但也许这意味着我们应该使用二级缓存?
我们的设计有一个jvm,它是一个jboss/webapp(读/写),用于通过hibernate(使用jpa)维护数据到db.该模型具有10-15个持久类,在关系中具有3-5个深度级别.
然后我们有一个单独的jvm,它是使用这些数据的服务器.当它连续运行时,我们只有一个长db会话(只读).
目前没有涉及jvm内部缓存 - 所以我们手动发信号通知另一个jvm.
现在,当webapp更改某些数据时,它会通知服务器重新加载已更改的数据.我们发现我们需要告诉hibernate清除数据然后重新加载它.只是对数据库进行提取/合并不起作用 - 主要是关于层次结构中几层的对象.
关于这个设计是否存在根本性错误的任何想法,或者是否有人这样做,并且在重新加载时使用hibernate有更好的运气.
谢谢,克里斯
我的Rails应用程序通过了测试,但随后说0%通过了.它的Rails 3应用程序转换为3.1.
5 tests, 11 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
Run Code Online (Sandbox Code Playgroud)
如果我生成一个新的Rails 3.1应用程序,它没有这个"通过"线.
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
Run Code Online (Sandbox Code Playgroud)
两者都在1.9.2 p290下运行.
我试图删除测试单元,但这似乎没有什么区别,没有其他任何突出的东西会导致它.我想有些东西正在触发使用不同的测试运行器.
这些是我的应用程序安装的宝石:
actionmailer (3.1.1)
actionpack (3.1.1)
activemodel (3.1.1)
activerecord (3.1.1)
activeresource (3.1.1)
activesupport (3.1.1)
ansi (1.3.0)
archive-tar-minitar (0.5.2)
arel (2.2.1)
bcrypt-ruby (3.0.1)
bootstrap-sass (1.3.0)
builder (3.0.0)
bundler (1.0.21)
coderay (0.9.8)
coffee-rails (3.1.1)
coffee-script (2.2.0)
coffee-script-source (1.1.2)
columnize (0.3.4)
devise (1.4.7)
devise_rpx_connectable (0.2.2)
enumerated_attribute (0.2.16)
erubis (2.7.0)
execjs (1.2.9) …Run Code Online (Sandbox Code Playgroud) 我想一次做几个聚合函数,例如获取按状态分组的最大和最小ID:
Model.maximum(:id).minimum(:id).group(:status)
Run Code Online (Sandbox Code Playgroud)
这不起作用(至少使用Rails 3.1.1) - 你在最小调用上得到一个错误,说它没有在Fixnum上定义.
NoMethodError: undefined method `minimum' for 22377:Fixnum
Run Code Online (Sandbox Code Playgroud)
我可以为它做原始的SQL - 但只是想知道是否有更高级别/ Rails选项...
谢谢,克里斯
在我的Rails 3.1应用程序(使用Ruby 1.9)中,我有一个Deployer1类,位于model目录下的worker子目录中
我试图使用以下代码动态加载/实例化此类:
clazz = item.deployer_class # deployer_class is the class name in a string
deployer_class = Object.const_get clazz
deployer = deployer_class.new
Run Code Online (Sandbox Code Playgroud)
如果我不使用名称空间,例如像这样的全局:
class Deployer1
end
Run Code Online (Sandbox Code Playgroud)
然后它工作正常(deployer_class ="Deployer1") - 它可以加载类并创建对象.
如果我尝试将它放入一个模块来命名它,如下所示:
module Worker
class Deployer1
end
end
Run Code Online (Sandbox Code Playgroud)
它不起作用(deployer_class ="Worker :: Deployer1") - 给出一个关于缺少常量的错误,我相信这意味着它找不到类.
我可以通过我的Rails代码以静态方式访问该类(Worker :: Deployer1.new) - 所以Rails配置正确加载它,也许我正在以错误的方式加载它...
编辑:那么,根据弗拉德的回答,我采用的解决方案是:
deployer_class.constantize.new
Run Code Online (Sandbox Code Playgroud)
谢谢克里斯
我有一个Java HashMap,我在JRuby,我试图将其转换为JSON,但它没有正确转换,我认为这个例子显示了问题:
$ irb [17:23:50]
irb(main):001:0> require 'java'
=> false
irb(main):003:0> require 'json'
=> true
irb(main):005:0> h = java.util.HashMap.new()
=> {}
irb(main):006:0> x = {}
=> {}
irb(main):007:0> JSON.parse JSON.dump x
=> {}
irb(main):008:0> JSON.parse JSON.dump h
JSON::ParserError: unexpected token at '"{}"'
from json/ext/Parser.java:251:in `parse'
from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/lib/ruby/1.9/json/common.rb:155:in `parse'
from (irb):9:in `evaluate'
from org/jruby/RubyKernel.java:1066:in `eval'
from org/jruby/RubyKernel.java:1409:in `loop'
from org/jruby/RubyKernel.java:1174:in `catch'
from org/jruby/RubyKernel.java:1174:in `catch'
from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/bin/irb:13:in `(root)'
irb(main):010:0> JSON.dump h
=> "\"{}\""
Run Code Online (Sandbox Code Playgroud)
关于如何处理这个问题的任何想法 - 我是否需要将地图转换为Ruby地图?
谢谢,克里斯
我们的web应用程序有通常的web.xml,其中包含一些jsp和jsp标记文件.我想切换到使用预编译的jsp.我在build ok中进行了预编译,它生成了web.xml片段,现在我想将片段合并到主web.xml中.
是否有web.xml的include类型指令可以让我包含片段.
理想情况下,我会保留DEV的内容,因为它有助于动态更改jsp并立即查看更改,但是对于UAT/PROD,jsp将被预编译,从而更快地工作.
我想在序列化对象之前设置一些属性,但是因为它可以从多个位置序列化,有没有办法使用OnSerializing方法(或类似)进行Xml序列化 - 我的类很像这样 - 但是On ...方法没有被调用...:
[Serializable]
[XmlRoot(ElementName = "ResponseDetails", IsNullable = false)]
public class ResponseDetails
{
public ResponseDetails() {}
[OnSerializing]
internal void OnSerializingMethod(StreamingContext context)
{
logger.Info("Serializing response");
}
[OnSerialized]
internal void OnSerializedMethod(StreamingContext context)
{
logger.Info("Serialized response");
}
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
logger.Info("Deserialized response");
}
[OnDeserializing]
internal void OnDeserializingMethod(StreamingContext context)
{
logger.Info("Deserializing response");
}
Run Code Online (Sandbox Code Playgroud) 我希望为Excel数据表中的每个数据行设置/定义一个唯一的ID - 这样我可以在向前传递数据时使用它,并且当在其上面添加/删除行时它保持不变.
我的想法是使用Range的ID属性(msdn link)
所以,我有一个用户定义的函数(UDF),我放在每一行获取/设置ID,如下所示:
Dim gNextUniqueId As Integer
Public Function rbGetId(ticker As String)
On Error GoTo rbGetId_Error
Dim currCell As Range
'tried using Application.Caller direct, but gives same error
Set currCell = Range(Application.Caller.Address)
If currCell.id = "" Then
gNextUniqueId = gNextUniqueId + 1
'this line fails no matter what value I set it to.
currCell.id = Str(gNextUniqueId)
End If
rbGetId = ticker & currCell.id
Exit Function
rbGetId_Error:
rbGetId = "!ERROR:" & Err.Description
End Function
Run Code Online (Sandbox Code Playgroud)
但这在提到的那条线路上失败了
"应用程序定义的或对象定义的错误" …
我有一个应用程序,我从Ruby迁移到JRuby(由于需要通过Java提供更好的Web服务安全性支持).我使用的一个宝石是用于创建后台作业的守护进程.
问题是它使用fork + exec来创建后台进程,但这对JRuby来说是禁忌.
那么 - 是否有用于创建后台作业的替代gem/wrapper?
我目前的想法是从shell脚本调用rake并让rake任务永远运行...
谢谢,克里斯.
更新我们目前正在使用几个与Java线程相关的包装器,即https://github.com/jmettraux/rufus-scheduler和https://github.com/philostler/acts_as_executor