ColdFusion ORM和默认构造函数(init方法)

时间:2015-02-01 21:27:06

标签: hibernate orm coldfusion coldfusion-9 coldfusion-11

Hibernate需要一个no-args构造函数,并且在支持方法重载的所有语言中都可能不是问题,但我在ColdFusion ORM中遇到了一个非常烦人的问题(它依赖于Hibernate罩)。

如果我为我的实体声明了一个自定义构造函数(一个init方法),并且该构造函数需要一些参数,那么Hibernate无法重新实现我的实体,因为它调用了自定义构造函数。

由于这种行为,似乎几乎不可能设计始终有效的实体,因此使CF-ORM接近完全无用。

我发现的唯一解决方法是声明另一个我用作构造函数的自定义方法,这使得实例化对象现在看起来像new SomeEntity().construct(...)createObject('component', 'SomeEntity').construct(...)。这很麻烦......

在这一切中非常愚蠢的是你可以在不使用init调用createObject方法的情况下实例化实体,所以我想知道为什么他们决定让Hibernate调用{{1它们的实现方法,考虑到它甚至没有传递参数,然后通过其他方式设置它们。

无论如何,该问题还有其他解决方法吗?

编辑:

I filed a bug in the Adobe Bugbase

3 个答案:

答案 0 :(得分:0)

始终有效的实体很少存在。因此,使用某种验证方法可能是您可以使用的路线之一。

或者您可以做的是继续拥有自己的对象,并仅在DAO层中使用ORM。但是,你会有另一组类似的课程,但是,这就是人们不喜欢ORM的原因。

答案 1 :(得分:0)

如果一个实体没有空构造函数,那么Hibernate在实例化实体时就不知道要提供什么参数。

您可以创建默认构造函数protected,Hibernate会找到它,因为PojoInstantiator使用声明的构造函数:

constructor = ReflectHelper.getDefaultConstructor( mappedClass );

您可以定义Builder来构造实体,而不是使用重载的构造函数。

这样,您可以强制说明客户端API只使用Builder,而不是默认构造函数。

答案 2 :(得分:0)

many efforts in making this request approved之后,它已被修复。

  

Nimit Sharma

     

格林威治标准时间上午5:08:05 + 2015年11月20日00:00

     

此问题已修复,修复程序将作为下一部分的一部分提供   ColdFusion的主要版本。

     

我们引入了一个属性" orminitmethod"在组件级别   解决这个问题。子组件不继承orminit方法。它   表现完全像initmethod。

     

我已经记录了另一个跟踪错误#4090267以获得一个应用程序   等级设置

相关问题