- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些这样的代码
class root extends DomainObject{
Collection childElements;
Collection childElements2;
.....
//define other child element collections
Collection getChildElements(){
return childElements;
}
// define other childElements getter/setter
我的 package.jdo 定义了如下所示的映射
<class name="root" identity-type="datastore" detachable="true" persistence-capable-superclass="com.xxx.DomainObject">
<inheritance strategy="new-table"/>
<field name="childElements" persistence-modifier="persistent" default-fetch-group="true">
<collection element-type="com.my.CustomClass" />
<join/>
<order column="idx"/>
<extension vendor-name="jpox" key="cache-lazy-loading" value="false"/>
</field>
自定义类结构可能看起来像这样
class CustomClass extends DomainObject{
String name;
Collection otherElements;
.....
String getName(){
return name;
}
Collection getOtherElements(){
return otherElements;
}
现在创建 com.my.CustomClass 的对象,代码如下所示
persistenceManager().currentTransaction().begin();
CustomClass customObj = new CustomClass();
customobj.setName("someName");
//set other values
persistenceManager.makePeristent(customObj);//persist
SomeUtil.getRoot().getChildElements().add(customObj);//add to its owner
persistenceManager.currentTransaction().commit();
SomeUtil 中 getRoot() 的代码看起来像这样
Query q = persistenceManager.newQuery( root.class );
Collection c = (Collection)q.execute();
persistenceManager.retrieveAll( c );
return (root)c.iterator().next();
我不明白的是为什么我们需要将这个新的自定义对象添加到所有者? SomeUtil.getRoot().getChildElements().add(customObj);
删除代码也看起来类似,即,首先将对象从其所有者的集合中删除,然后调用 persistenceManger 的 deletePersistent
。
我的问题是我们真的需要显式地将这个对象添加到父对象中吗?难道 makePeristent()
本身还不够吗?我问的原因是我发现这个“getRoot()”对性能造成了一些影响(即使底层对象是延迟加载的,当这些藏品的数量很大)。
在运行时,我们使用此“根”对象的缓存/可拆卸副本(例如深度克隆),并且仅从此“根”中检索任何所需元素。如果对数据库进行了任何修改,那么我们将使此缓存无效并重新加载此根并再次缓存它。
删除在父元素中显式添加或删除子元素的代码是否安全?或者根据我们定义的映射确实需要它(并且考虑到我们依赖缓存(克隆)根来在运行时检索所有子元素)?请注意,我们在运行时(深度用户克隆)和创建对象期间没有使用相同的“根”。只是我们在运行时依赖“根”来获取其他元素。请告诉我是否有人处理过这种情况。
最佳答案
我对此进行了测试,并观察到,如果您在父元素不知情的情况下添加子元素,则无法使用父元素检索该子元素。
persistenceManager().currentTransaction().begin();
CustomClass customObj = new CustomClass();
customobj.setName("someName");
//set other values
persistenceManager.makePeristent(customObj);//persist
//comment this
//SomeUtil.getRoot().getChildElements().add(customObj);//add to its owner
persistenceManager.currentTransaction().commit();
后来当我加载该父元素时,我发现未检索到子元素。
Collection c = SomeUtil.getRoot().getChildElements()
// Iterate over this collection and found that element is not present
正如我之前所说,我们在运行时依赖此根对象来检索任何子元素。尽管直接查询子项是可行的,但这对我们来说不是一个选择。
看来我们只能通过将该子级添加到父级来实现此目的。但我们希望避免这种情况,因为检索父项(根)会对性能产生一些影响(即使它们是延迟加载的),因为该根有许多其他子集合元素。在运行时,我们通常加载此根一次并缓存干净的副本。
关于java - JDO PersistentManager 的 makePersistent 不足以创建子元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293749/
我有一些这样的代码 class root extends DomainObject{ Collection childElements; Collection childElements2; ....
我想将 Tomcat 的 HttpSession 保存到磁盘,以便它可以在可扩展的云环境中使用。关键是将有许多 Tomcat 节点(在云 PaaS 中),客户端可以定向到其中任何一个。我们希望从共享磁
我正在关注一本关于 Tomcat 7 的书,我正在尝试将 PersistentManager 与 FileStore 一起用于 session 持久性。 我有一个在 Eclipse 中运行的 Tomc
在 Tomcat6 上将 PersistentManager 与 JDBC Store 结合使用时,我遇到了一个奇怪的问题。我可以看到正在写入数据库的 session 。我可以将 int、boolea
我是一名优秀的程序员,十分优秀!