使用 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
中可用。
我正在尝试使用 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
中可用。