使用 Scala 在 Neo4j OGM 中添加标签

Labels in Neo4j OGM with Scala

我正在尝试使用 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))
    }

  }

}

知道我在这里遗漏了什么吗?

这个问题是一个错误,因为任何 class 没有支持标签字段的 get/set 方法都不受支持。它已得到修复,并在 2.1.0-SNAPSHOT 中可用。