【发布时间】:2017-09-06 06:22:27
【问题描述】:
我有一个用 Kotlin 编写的简单 REST spring boot 应用。
它有下一个架构:Map hasOne Channel 和 Channel hasMany Headers
我只有一个控制器操作,并且想将我的所有模型保存在一个请求中,如下所示:
{
"channel": {
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
如果未设置标题,则所有模型都正确关联并且数据库插入顺序也正确:首先创建Channel,然后使用此Channel创建Map
但是当我添加一些 Header 列表时 - Hibernate 在 DB 中添加了额外的 Channel(ID=2)行并将所有 Header 模型绑定到此通道(ID=2 )
地图模型:
...
@ManyToOne(cascade = arrayOf(CascadeType.ALL))
@JoinColumn(name = "channel_id")
var channel: Channel = Channel(),
...
渠道模式:
...
@OneToMany(mappedBy = "channel", cascade = arrayOf(CascadeType.ALL), )
var headers: MutableSet<Header> = mutableSetOf(),
...
@JsonIgnore
@OneToMany(mappedBy = "channel", cascade = arrayOf(CascadeType.ALL))
var maps: MutableSet<Map> = mutableSetOf(),
...
标头模型:
...
@JsonIgnore
@ManyToOne(cascade = arrayOf(CascadeType.ALL))
@JoinColumn(name = "channel_id")
var channel: Channel = Channel(),
...
也许应该修复一些注释。很高兴听到任何建议。谢谢大家!
更新
这样保存模型:
@PostMapping("/maps")
fun post(@RequestBody body: Map) = repo.save(body)
更新 2
如果手动创建一个对象,并将必要的属性类型声明为nullable - channel_id 将是null
将此代码添加到操作中
val channel = Channel(
...
)
body.channel!!.headers.forEach {
val header = Header(
name = it.name,
value = it.value
)
channel.headers.add(header)
}
val map = Map(
channel = channel
)
return repo.save(map)
【问题讨论】:
标签: spring-boot kotlin hibernate-onetomany