我正在尝试用gradle测试quarkus上的1:m映射。使用的扩展:
夸库斯休眠模式
quarkus弹簧网
邮递员:
POST打开http://localhost:8080/tree带请求:
{
"name":"mango",
"fruits": [
{"name":"a",
"color":"red"
},
{"name":"b",
"color":"yellow"
}
]
}
现在,当进行"上车"时http://localhost:8080/tree得到空的水果。为什么它是空的找不到。
[
{
"treeId": 1,
"name": "mango",
"fruits": []
}
]
我使用了以下1个控制器类和2个实体类。
@RestController
public class TreeController {
@PostMapping("/tree")
@Transactional
public void addTree(Tree tree) {
Tree.persist(tree);
}
@GetMapping("/tree")
public List<Tree> getTree() {
return Tree.listAll();
}
}
@Entity
public class Tree extends PanacheEntityBase{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long treeId;
public String name;
@OneToMany(mappedBy = "tree", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
public List<Fruit> fruits;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Fruit> getFruits() {
return fruits;
}
public void setFruits(List<Fruit> fruits) {
this.fruits = fruits;
}
public Long getTreeId() {
return treeId;
}
public void setTreeId(Long treeId) {
this.treeId = treeId;
}
}
@Entity
public class Fruit extends PanacheEntityBase {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long fruitId;
public String name;
public String color;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="treeId")
public Tree tree;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Tree getTree() {
return tree;
}
public void setTree(Tree tree) {
this.tree = tree;
}
public Long getFruitId() {
return fruitId;
}
public void setFruitId(Long fruitId) {
this.fruitId = fruitId;
}
}
在持久化之前可以尝试设置后引用吗?
@RestController
public class TreeController {
@PostMapping("/tree")
@Transactional
public void addTree(Tree tree) {
for(Fruit fruit : tree.fruits)
fruit.tree = tree;
Tree.persist(tree);
}
@GetMapping("/tree")
public List<Tree> getTree() {
return Tree.listAll();
}
}