【问题标题】:Unable to save an entity "a foreign key constraint fails "无法保存实体“外键约束失败”
【发布时间】:2021-10-21 02:52:05
【问题描述】:

我正在尝试将实体保存到使用 @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`))

我是否以适当的方式保存实体?也许应该从其他地方完成?

【问题讨论】:

    标签: java sql hibernate foreign-keys


    【解决方案1】:

    什么是你不明白的?您指的是此MachineGroupToMachine 实体中的一台机器,该实体在数据库中不存在(还没有?)。如果您还想持久化机器,那么您将不得不在机器关联上使用@ManyToOne(cascade = PERSIST),但我怀疑这是您通常想要的。因此,只需在持久化 MachineGroupToMachine 之前持久化机器即可。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2012-06-21
      • 2013-05-29
      • 1970-01-01
      • 2018-09-17
      • 2021-09-03
      • 1970-01-01
      • 2013-03-04
      • 2016-08-17
      相关资源
      最近更新 更多