0

EclipseLink user guide指出,当为复合主键构造IdClass(不嵌入)时,它必须具有公共无参数构造函数并实现方法equalshashCode。另外,它给出的例子也实现了getter和setter。EclipseLink中的IdClass的要求是什么?

Persistence WikiBook有参数,无无参数的构造函数,没有getter和setter的公共构造函数,并且明确指出的EclipseLink不需要执行equalshashCode

其中哪些是真的需要?我可以使用最小的IdClass只有属性,没有构造函数和方法,因为EclipseLink会为我生成这些?这是否依赖于EclipseLink的版本?

回答

1

只需要无参数构造函数(除非另有一个定义,否则由java生成)。您只能使用属性最小的类。

但是,EclipseLink在这种情况下不会生成任何东西(即使编织),这意味着您可能会遇到意外的散列或基于等号的操作问题。

+0

那么这是否意味着如果没有指定'hashCode'和'equals',主键的相等性默认为对象标识?因此,实际上包含这些方法在EclipseLink中仍然是必需的? – oulenz

+1

基本上,是的。我建议总是指定'hashCode/equals'方法,但即使没有它,在简单用例(如'select * from ...'等)中它也能正常工作。 –

相关问题