我想使用JPA创建组织结构。如果我使用我的控制器插入数据,它将抛出PSQLException,因为第一个节点的父节点为空。但是如果我手动将第一个节点输入到DB中,它适用于下一个节点。我阅读了this和其他帖子,但对我来说没有运气。
这是我的实体:
@RestController
@RequestMapping("/node")
public class NodeController {
@Autowired
private NodeRepository nodeRepository;
@GetMapping
public @ResponseBody Iterable<Node> index(){
return nodeRepository.findByParentIsNull();
}
@PostMapping
public String add(
@RequestBody List<Node> nodes){
nodes.stream().forEach(
node -> {
node.addNode(node);
}
);
nodeRepository.saveAll(nodes);
return "nice";
}
}
这是我的控制者:
[
{
"id":8,
"name":"Top Parent",
"parent":{}
},{
"id":9,
"name":"Node 1",
"parent":{
"id":8
}
},{
"id":10,
"name":"Node 2",
"parent":{
"id":8
}
},{
"id":11,
"name":"Node 3",
"parent":{
"id":9
}
}
]
而且,这是我的数据样本:
id |name |parent_id
===========================
8 |Top Parent |null
9 |Node 1 |8
10 |Node 2 |8
11 |Node 3 |9
通过控制器插入后的预期结果是:
defaultOptions = {} // your default options here
function resetOptions(chart) {
chart.options = defaultOptions;
chart.update();
}
如果不清楚,请告诉我。提前谢谢!
答案 0 :(得分:0)
我找到了解决问题的方法。所以,如果有人遇到与我类似的问题,我就放在这里。 我在我的存储库中添加了一个NativeQuery,如下所示:
exports.UserDiseaseInfo = (req, res, next) => {
let retval = {};
let dId = "";
let subDName = "";
let body = req.body;
let UId = (body.UId != undefined) ? body.UId : false;
let SubDId = (body.SubDId != undefined) ? body.SubDId : false;
if (UId == false || SubDId == false) {
res.status(404).send({
response: "Fail",
body: req.body
})
}
subDisease_model.findById(SubDId, function(error, doc) {
if (error) {
let data = {
response: 'false',
subDisease: "",
DiseaseId: ""
}
return res.status(404).send(data);
} else {
dId = doc['DiseaseID'];
subDName = doc['SubDisease'];
let data = {
response: 'success',
subDisease: subDName,
DiseaseId: dId
}
return res.status(200).send(data);
}
})
}
然后我在控制器中添加了一些这样的行:
@Query(value = "insert into tree values(:id,:name)", nativeQuery = true)
void saveTop(@Param("id")int id,@Param("name")String name);
基本上,我创建了一个端点(&#34; / node / top&#34;)来手动插入我的结构组织树的顶层节点。