首先,我很抱歉,如果我的英语不是最好的,但我会尽我所能来解释我的问题。
我其实是想保存的对象在我的数据库,但我有一个PSQLException说,我不能救不救了我的第一个对象(外键的问题)。
所以,我有一个目标,使命,含有干酪。这里是我的类:
@Entity
@Table(name = "T_MISSION")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Getter
@Setter
@NoArgsConstructor
public class Mission implements Serializable {
private static final long serialVersionUID = -8050548742704457221L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_mission_t_frais", joinColumns = {
@JoinColumn(name = "fraiss_id") }, inverseJoinColumns = {
@JoinColumn(name = "missions_id", referencedColumnName = "id") })
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Frais> fraiss = new HashSet<>();
}
这是我的班“干酪”:
@Entity
@Table(name = "T_FRAIS")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Getter
@Setter
@NoArgsConstructor
public class Frais implements Serializable {
private static final long serialVersionUID = -4881527916470482329L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(mappedBy = "fraiss")
private Set<Mission> missions = new HashSet<>(0);
}
正如你所看到的,当我尝试保存新的任务,我想保存在其中包含fraiss_id和missions_id名为“t_mission_t_frais”一个数据库表我的数据。
但现在,我不能保存它,因为这个错误的:“org.postgresql.util.PSQLException:ERROR:上表中插入或更新语句‘t_mission_t_frais’违反键约束国外的‘fk_frais_mission_id’详细信息:关键(missions_id) =(60261)未出现在表“t_mission”“。
这里是我的MissionService:
@Service
@Transactional
public class MissionService {
@Autowired
private MissionRepository missionRepository;
public void save(Mission mission) {
missionRepository.save(mission);
}
}
正如我在Java中是新的,我想我missconfigured在我的任务类的东西,但我想我的使命不是第一次保存(在干酪的人之前),该块保存的交易...
我已经试着用“saveAndFlush”来代替“保存”,和做其他的东西没有结果,我想...
你们可以可以帮助我,如果你有什么想法?
编辑:
我的任务是与前端应用(角)和JSON格式发送创建。这里是一个为例:
id: 67114,
fraiss: [
{
actif: true
fraisType: {id: 44881, libelle: "Indemnité", actif: true}
actif: true
id: 44881
libelle: "Indemnité"
id: 60261
libelle: "53,50€ par nuité"
missions: []
},
{
actif: true
fraisType: {id: 136, libelle: "Frais", actif: true}
actif: true
id: 136
libelle: "Frais"
id: 23986
libelle: "54€ par jour"
missions: []
}
]
@RequestMapping(value = "/rest/manage/missions", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public void create(@RequestBody Mission mission) {
log.debug("REST request to save Mission : {}", mission);
missionService.save(mission);
}
这个问题对我的JPA的配置。这次任务的节省是在错误的道路:这是triying我t_mission_t_frais(fraiss_id,missions_id)的(missions_id,fraiss_id)一个新的值保存,存在的一个PSQLException因为任务didnt存在
在我的团课,我的“连接表”中的错误的方式宣布:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_mission_t_frais",
joinColumns = { @JoinColumn(name = "missions_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "fraiss_id", referencedColumnName = "id") })
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Frais> fraiss = new HashSet<>();
但仅仅做到这一点修改是计算器帮了我,所以我不得不改变我的干酪类太:
@ManyToMany
@JoinTable(name = "t_mission_t_frais",
joinColumns = { @JoinColumn(name = "missions_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "fraiss_id", referencedColumnName = "id") })
private Set<Mission> missions = new HashSet<>(0);
我现在可以节省我的对象!由于西蒙的帮助!