实体的主要构造函数中的非null关系

时间:2019-02-13 12:50:15

标签: kotlin neo4j neo4j-ogm

我正在使用Spring Data Neo4j和Kotlin创建应用程序。我使用标准的kotlin方法来声明实体(具有主要构造函数的类)。一切工作正常,直到我想在我的实体之间创建简单的一对多和强制性关系。当我在存储库中调用.findAll()时,我得到Parameter specified as non-null is null: method ...model.Campaign.<init>, parameter client

我试图调用.findAll(depth = 1)将相关实体加载到我的实体中,但这无济于事。

@NodeEntity
class User(var name: String)
{
    @Id @GeneratedValue
    var id: Long? = null
}

@NodeEntity
class Campaign(
    var name: String,
    @Relationship(type = "CLIENT", direction = Relationship.OUTGOING)
    var client: User)
{
    @Id @GeneratedValue
    var id: Long? = null
}

interface CampaignRepository : Neo4jRepository<Campaign, Long>

//...

campaignRepository.save(Campaign("C1", user))

campaignRespository.findAll()

当然,我可以声明var client: User?为可空值,一切都很好。但是,由于在我的模型中,我将同时具有强制性和可选性关系,所以我想知道是否有一种方法可以克服这个问题。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,但不是很好:

@NodeEntity
class Campaign(
    var name: String,
    client: User?)
{
    @Id @GeneratedValue
    var id: Long? = null

    @Relationship(type = "CLIENT", direction = Relationship.OUTGOING)
    lateinit var client: User

    init
    {
        client?.let { this.client = it }
    }
}