带有Scala的Neo4j OGM中的标签

时间:2016-09-08 09:36:46

标签: scala neo4j neo4j-ogm

我正在尝试使用OGM在Neo4j中实现多租户。我最喜欢的解决方案是使用标签来标记具有租户ID的实体。不幸的是我无法在Scala中使用标签。首先,我创建了这样的实体:

trait Entity {
  @GraphId
  @Property
  var graphId: java.lang.Long = _
}

@NodeEntity
class Tenant extends Entity {

   @Property
   var name: String = _

}

@NodeEntity
class Project extends Entity {

   @Property
   var name: String = _

   @Relationship(`type` = "TENANT", direction = Relationship.OUTGOING)
   var tenant: Tenant = _

   @Labels
   val labels: java.util.Collection[String] = new java.util.ArrayList[String]()

   def this(name: String, tenant: Tenant) {
    this()
    this.labels.add(tanant.uuid.toString)

   }

   def hasLabel(label: String): Boolean = {
     this.labels.contains(label)
   }

}

我的存储库只有一个简单的保存方法

abstract class Repository[Model <: Entity] {

  def save(entity: Model): Model = {
    val session = getSession()
    session.save(entity)

    entity
  }

}

我使用嵌入式Neo4j数据库创建了一个简单的测试,但是最后一个断言失败了false(这意味着添加的标签没有被保留)。

class ProjectSuite extends BaseSuite with Neo4jOgmTestSuite {

  "Project Model" should {

    "save properly with Tenant label" in {
      val tenant = new Tenant("TestTenant")
      TanantRepository.save(tenant)

      val project = new Project("TestProject", tenant)
      ProjectRepository.save(project)

      assert(project.hasLabel(tenant.uuid.toString))

      val loadedProject = ProjectRepository.findById(project.uuid)
      assert(loadedProject isDefined)
      assert(loadedProject.get.hasLabel(tenant.uuid.toString))
    }

  }

}

知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

此问题是一个错误,因为不支持没有支持标签字段的get / set方法的任何类。它已修复,可在2.1.0-SNAPSHOT中找到。