簡體   English   中英

無法保存實體“外鍵約束失敗”

[英]Unable to save an entity "a foreign key constraint fails "

我正在嘗試將實體保存到使用 @JoinTable 注釋創建的表中。

這是設置表的主要實體:

public class MachineGroup {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator = "machine_groups_seq")
    @SequenceGenerator(name = "machine_groups_seq", allocationSize = 1, initialValue = 2)
    @Column(name = "id")
    private long id;
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "machine_groups_to_machines",
            joinColumns = @JoinColumn(name = "machine_group_id"),
            inverseJoinColumns = @JoinColumn(name = "machine_id"))
    private Set<Machine> machines;
}

我嘗試保存的實體:

@Entity
@Table(name="machine_groups_to_machines")
@Getter
@Setter
public class MachineGroupToMachine {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;
    @ManyToOne
    @JoinColumn(name = "machine_id")
    private Machine machine;
    @ManyToOne
    @JoinColumn(name = "machine_group_id")
    private MachineGroup machineGroup;

 public MachineGroupToMachine(Machine machine, MachineGroup machineGroup) {
        this.machine = machine;
        this.machineGroup = machineGroup;
    }
}

現在我試圖通過 MachineGroupToMachineRepository 直接使用這個保存 MachineGroupToMachine :

 public MachineGroup save(Machine machine, MachineGroup machineGroup){
        Optional<MachineGroupToMachine> omgm = machineGroupToMachineRepository.findMachineGroupToMachineByMachineAndMachineGroup(machine, machineGroup);
        if(omgm.isPresent()){
            String names = MessageFormat.format("Machine {0} and Machine Group {1}", machine.getName(), machineGroup.getName());
            throw new EntityAlreadyExistsException(names);
        }
        return machineGroupToMachineRepository.save(new MachineGroupToMachine(machine, machineGroup)).getMachineGroup();
    }

Hibernate 嘗試執行此查詢:

Hibernate: insert into machine_groups_to_machines (machine_id, machine_group_id) values (?, ?)

這是例外:

Cannot add or update a child row: a foreign key constraint fails (`test_db`.`machine_groups_to_machines`, CONSTRAINT `FK7g1k7n6hssjrwqadtrx0pc840` FOREIGN KEY (`MACHINE_ID`) REFERENCES `machines` (`id`))

我是否以適當的方式保存實體? 也許應該從其他地方完成?

你不明白的是什么? 您指的是此MachineGroupToMachine實體中的一台機器,該機器在數據庫中不存在(還?)。 如果你還想保留機器,那么你將不得不在機器關聯上使用@ManyToOne(cascade = PERSIST) ,但我懷疑這是你通常想要的。 所以在你堅持MachineGroupToMachine之前堅持機器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM