JPA - 多对多 - 外键时侵犯创建/更新

问题描述 投票:0回答:1

首先,我很抱歉,如果我的英语不是最好的,但我会尽我所能来解释我的问题。

我其实是想保存的对象在我的数据库,但我有一个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);
     }
java postgresql hibernate jpa insert-update
1个回答
0
投票

这个问题对我的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);

我现在可以节省我的对象!由于西蒙的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.