我正在尝试使用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))
}
}
}
知道我在这里缺少什么吗?
答案 0 :(得分:1)
此问题是一个错误,因为不支持没有支持标签字段的get / set方法的任何类。它已修复,可在2.1.0-SNAPSHOT
中找到。