首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Neo4J @Fetch问题与杰克逊序列化

Spring Neo4J @Fetch问题与杰克逊序列化
EN

Stack Overflow用户
提问于 2015-04-23 14:17:09
回答 1查看 134关注 0票数 0

我正在试图弄清楚为什么一个由250个对象组成的集合的Jackson JSON序列化需要40秒的时间,我认为我已经将其缩小到SDN延迟加载。我正在使用@Fetch,但它似乎仍然要求数据库提供集合中每个节点的每个属性的委托。请忽略任何打字,因为我必须手动输入,因为复制粘贴不是一个选项。请放心,类将按预期进行编译。被序列化的(简化的)类:

代码语言:javascript
代码运行次数:0
运行
复制
@NodeEntity
public class NodeWithDelegate {

  @RelatedTo(type="REL_NAME", direction=Direction.OUTGOING)
  @Fetch private DelegateNode delegate;

  private DelegateNode getInitializedDelegate() {
    if (delegate == null) {
      delegate = new DelegateNode();
    }
    return delegate;
  }

  public String getDelegateAttribute1() {
    return delegate == null ? null : delegate.getAttribute1();
  }

  public void setDelegateAttribute1(String attribute1) {
    getInitializedDelegate().setAttribute1(attribute1);
  }

  .... 

  public String getDelegateAttribute15() {
    return delegate == null ? null : delegate.getAttribute15();
  }

  public void setDelegateAttribute15(String attribute15) {
    getInitializedDelegate().setAttribute15(attribute15);
  }
}

DelegateNode类正是您所期望的,只是包含15个字符串或整数或布尔属性的简单@NodeEntity POJO。

所以有两个问题:

  1. 我怎样才能确定一个对象是否被急切地加载呢?我用的是月食。
  2. 为了调试目的,如果对象都被急切地加载,并且我在从数据库中获取集合和调用所有委托getter的序列化程序之间放置了一个断点,并且在暂停关闭数据库时,它应该工作吗?如果所有对象都被急切地加载,那么此时对象是否需要与数据库对话呢?

我想我应该提到我正在为neo4j使用rest。

事先非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 07:44:48

我假设您使用的是3.x版本的Spring Neo4j。

这个版本对于REST并不是很优化。如果您启用了密码查询的日志记录,您将看到很多。Log4j示例:

代码语言:javascript
代码运行次数:0
运行
复制
log4j.category.org.springframework.data.neo4j.support.query=DEBUG

您可以使用自定义密码查询和使用@QueryResult注释映射结果来解决这一限制。

  1. 使用日志记录,您应该会看到您的对象正在加载。
  2. 除非DelegateNode本身有“懒惰”之处,否则应该如此。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29826177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档