使用Scala在Play 2.x应用程序中使用Spring Data Neo4j

5

我目前正在开发一个基于Neo4j(v2.1.2,托管在GrapheneDB)和Play(v2.3),使用Scala(2.11.1)(托管在Heroku)的Web服务。

目前为止,AnormCypher连接了Play应用程序与Neo4J实例,并且一切都按预期工作。

但是使用AnormCypher感觉不太对。我需要编写很多样板代码将从AnormCypher获取的结果转换为用于业务逻辑的Scala类。我更喜欢使用类似于Spring Data Neo4j的东西。

示例代码看起来很干净,我想在项目中尝试一下。

这些技术都是我不熟悉的,所以我需要一些帮助:

  • 如何在Play应用程序中使用Spring Data Neo4j(build.sbt,plugin.sbt等)?
  • 由于我没有使用整个Spring堆栈,我应该期待哪些困难?
  • 在Scala应用程序中集成基于Java的框架有哪些缺点?
1个回答

3

很抱歉我的回答可能有些不完整,但我想发表一下我的看法。

我认为在Scala中有一些类似ORM的东西可以发挥作用,并且我希望能够实现从结果流到案例类的自动转换(在AnormCypher中),但是我始终无法使它与内部案例类的.map()构造函数一样高效(而且它也不能用于内部案例类和其他一些注意事项)。我希望能够投入更多的精力,使其更像Mongo的Salat,以便更好地支持案例类转换。

我曾经梦想过这样的语法:

scala> Cypher("RETURN "foo" as foo, "bar" as bar")()[MyCaseClass]
res0: Stream[MyCaseClass](...)

无论如何,回到您的主要问题,在一段时间前,我看到一个人在cake solutions找到了如何让Spring Data Neo4j在Scala中工作的方法:http://www.cakesolutions.net/teamblogs/2012/03/29/neo4j-spring-data-scala。这篇文章有点老,但可以帮助您入门,并让您了解它可能有些繁琐。我发现@annotation语法在Scala中不太符合惯用法。

据我所知,Scala在Neo4j内部用于实现Cypher。您是否知道Neo Technology或任何其他方(也许是您、Typesafe或cakesolutions?)有兴趣推出Scala的开源OGM?如果是的话:我应该在哪里询问?我认为可以使用Spring并忽略不符合惯例的@annotation方法(当我使其工作时...)。无论如何,我认为拥有专门为Scala制作的东西会非常好...在那之前,使用Play和Spring Data Neo4j的Activator模板将是一个临时解决方案。类似于https://typesafe.com/activator/template/play-spring-data-jpa - Robin des Bois
据我所知,Spring Data Neo4j 在通过 REST 方式访问时性能较差。如果您想要完全使用 SD,则移动到未受管扩展可能是与托管的服务器模式下的 Neo4j 实例一起使用的唯一方法。 - albertoperdomo
1
还有一个新的Play插件,它在内部使用SD,但我不知道它在REST上的表现如何:https://github.com/tuxBurner/play-neo4jplugin - albertoperdomo
谢谢你的提示。我会研究一下play-neo4jplugin!我也听说过rest性能不佳的问题。这个问题会在下一次得到解决吗? - Robin des Bois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接