gpt4 book ai didi

hibernate - ColdFusion 中的多个 Hibernate session ?

转载 作者:行者123 更新时间:2023-12-02 23:30:17 24 4
gpt4 key购买 nike

我正在开发一个项目,该项目要求我们能够修改 ORM 实体上的数据,但不能将其保留回数据库。本质上,我们需要修改该对象并将其传递给对数据执行一些计算的服务,然后结束请求,而实际上不会保留任何数据。问题是执行计算的服务确实需要保留一些数据(运行日志、计算结果)。这意味着一旦该过程完成,我们就不能清除整个 session 。

我们正在使用的实体相对复杂(至少有十几个关系和许多更简单的属性),因此在刷新之前从 session 中逐出该实体及其所有相关实体并不是最佳选择。让事情变得更加困难的是,服务中存在一些执行计算的 ormFlush() 调用,这使得手动驱逐实体几乎不可能。由于存在大量关系,因此预先加载所有内容,然后在将其发送到服务之前将其全部逐出是不可行的。

由于这些问题,我尝试打开第二个永远不会被刷新的 Hibernate session (基本上是一个沙箱)。我们可以加载实体并在该 session 中进行所需的任何更改,而不必担心更改会持久保存到数据库中。

到目前为止,它已经成功,但有一个异常(exception):我无法调用隐式“has”方法(例如 hasFoo()hasBar())实体 - 它会导致 NullPointerException。

示例代码:

ormSession = ormGetSessionFactory().openSession();
person = ormSession.load( "person", javaCast( "int", 123 ) );

// assume person has a o2m relationship for "brother"
writeOutput( person.hasBrother() );

这会导致以下异常:

java.lang.NullPointerException at 
coldfusion.orm.ImplicitRelationUDF.runHasMethodWithNoArgs(ImplicitRelationUDF.java:410) at
coldfusion.orm.ImplicitRelationUDF.invoke(ImplicitRelationUDF.java:246) at
coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:431) at
coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414) at
coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2432) at
cfsean2ecfm1294924799.runPage(C:\websites\test.cfm:11)

我的预感是 ImplicitRelationUDF.java 正在尝试使用“标准”CF Hibernate session ,但失败了,因为该实体加载在不同的 session 中,但我目前不知道如何进一步研究。

我采取了另一种方法,仍然不起作用,但它(也许)值得深思。它抛出与上面代码相​​同的错误。

transaction {
person = entityLoadByPK( "person", 123 );
transaction action="rollback";
}

writeOutput( person.hasBrother() );

我愿意接受特定问题(修复 has*)或更普遍的问题(修改实体并确保数据不会保留回数据库)的解决方案。

最佳答案

将 session 默认设置为只读

ormSession = ormGetSessionFactory().openSession();
ormSession.setDefaultReadOnly( true );
person = ormSession.load( "person", javaCast( "int", 123 ) );

您在 session 中调用的任何内容都将是只读的

关于hibernate - ColdFusion 中的多个 Hibernate session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com