Grails - List返回代理类而不是域类

时间:2014-09-17 19:57:09

标签: java hibernate grails groovy

我注意到在Grails中调用域类的列表时,返回的结果是代理实例而不是实际的域类实例。

示例

println User.list()

[ com.mypackage.security.User_$$_javassist_28 ]

将这些代理类之一的实例与匹配的域类实例进行比较时,我收到错误的相等结果。

Groovy"与Java的差异"文件说明:

  

==表示所有类型的等号。   ...   因此,为简单起见,==表示Groovy中的equals()

然而,当将域类与这些代理类之一进行比较时,这似乎并不正确。

有人可以对此提供一些见解吗?

有没有办法调用列表并接收实际的域类实例?

我宁愿不必提供自定义的getHashCode并等于实现只是为了解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你不能使用list()返回不同的类型,并且==返回false应该没有任何事情可以做列表返回的类型。

在Java中,对于相同类型的2个对象,您必须实现equalshashCode。即使您可以使用==来测试相等性,Groovy也会分享相同的内容。

支持你的平等问题。

  

==表示所有类型的等号。   ...   因此,为简单起见,==表示Groovy中的equals()

这不是全部。

Here是一个更好的解释。

  

在通过正常的Groovy“强制”机制可能认为两个对象“相等”的情况下,==运算符会将它们报告为相等;如果这样做会破坏Java在equals方法周围的正常规则,那么.equals()方法就不会这样做。

既然你想避免实现,你可以利用Groovy AST。 您可以使用@EqualsAndHashCode注释该类,以便为您处理它。 Grooydoc here.