我试图存储多种关系,但它不存储关系。
以下代码生成了3个表。
士兵,奖章和士兵们。
该服务只使用save(士兵)调用CRUD接口。
它正确存储士兵,但它不会填充soldier_medals表中的任何行。
这是我发送给服务器的JSON:
{ " abbreviatedSequence":" XDF", "奖牌":[ { " name":" Purple", " id":1 }, { " name":" Red", " id":2 } ] "序列":" XDFREE", "姓名":" Savier" }
Employee.java
@Entity(name="employees")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Employee {
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Soldier.java
@Entity(name="soldier")
public class Soldier extends Employee{
private String sequence;
private String abbreviatedSequence;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "soldiers")
private List<Medal> medals;
public List<Medal> getMedals() {
return medals;
}
public void setMedals(List<Medal> medals) {
this.medals = medals;
}
public String getSequence() {
return sequence;
}
public void setSequence(String sequence) {
this.sequence = sequence;
}
public String getAbbreviatedSequence() {
return abbreviatedSequence;
}
public void setAbbreviatedSequence(String abbreviatedSequence) {
this.abbreviatedSequence = abbreviatedSequence;
}
}
Medal.java
@Entity
@Table(name = "medal")
public class Medal {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "medal_seq")
@SequenceGenerator(name = "medal_seq", sequenceName = "medal_seq", allocationSize = 1)
private Long id;
@Column(name = "NAME", length = 50, unique = true)
@NotNull
@Size(min = 3, max = 50)
private String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "soldier_medals", joinColumns = {
@JoinColumn(name = "medal_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "soldier_id",
nullable = false, updatable = false) })
private List<Soldier> soldiers;
public List<Soldier> getSoldiers() {
return soldiers;
}
public void setSoldiers(List<Soldier> soldiers) {
this.soldiers = soldiers;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
SoldierController.java
@RestController
public class SoldierController {
@Autowired
private SoldierService soldierService;
@RequestMapping(value="/api/contextsource/soldier",method= RequestMethod.POST)
public Soldier addSoldier(@RequestBody Soldier soldier) {
return soldierService.addSoldier(soldier);
}
}
答案 0 :(得分:0)
你是否在士兵实体类中尝试过这个,比如奖牌实体类:
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "soldier_medals", joinColumns = {
@JoinColumn(name = "soldier_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "medal_id",
nullable = false, updatable = false) })
private List<Medal> medals;
而不是:
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "soldiers")
private List<Medal> medals;
答案 1 :(得分:0)
我是以错误的顺序坚持实体。这就是我解决它的方法。
@RequestMapping(value="/api/contextsource/soldier",method= RequestMethod.POST)
public Soldier addPeptide(@RequestBody Soldier soldier) {
for(Medal s: soldier.getMedals()) {
Medal ss = medalService.getMedalById(s.getId());
ss.getMedals().add(soldier);
medalService.addMedal(ss);
}
return null;
}