【发布时间】:2019-02-13 12:50:14
【问题描述】:
我正在使用 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? 声明为可空,一切都很好。但是,由于在我的模型中,我将有强制和可选的关系,我想知道是否有办法克服这个问题。
【问题讨论】:
-
您确定您实际获取的所有广告系列都有客户吗?
-
在我的测试用例中,我在插入之前调用
campaignRepository.deleteAll() -
所以,其他活动不可能尝试映射到非空字段
-
既然
client是var,也许你可以用lateinit来修复它? -
在 kotlin 中,您不能在主构造函数参数上使用
lateinit