gpt4 book ai didi

java - Hibernate 无法对具有外键的表进行持续工作

转载 作者:行者123 更新时间:2023-11-29 12:47:28 24 4
gpt4 key购买 nike

我有 2 个表 train_headertrain_movement。列车标题在列 id 上有一个主键。

火车移动在列 header_id 上有一个链接到 train_header 的外键

ALTER TABLE `trains`.`train_movement` 
ADD CONSTRAINT `foobar`
FOREIGN KEY (`header_id`)
REFERENCES `trains`.`train_headers` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

我的火车头的java类注释如下

@Entity
@Table(name="train_headers")
public class TrainHeader implements Serializable {
private int id;
private List<TrainMovement> trainMovements;

@Id
public int getId() {
return this.id;
}

public void setId(int id) {
this.id = id;
}

//bi-directional many-to-one association to TrainMovement
@OneToMany(mappedBy="trainHeader", cascade = {CascadeType.ALL})
public List<TrainMovement> getTrainMovements() {
return this.trainMovements;
}

public void setTrainMovements(List<TrainMovement> trainMovements) {
this.trainMovements = trainMovements;
}

public TrainMovement addTrainMovement(TrainMovement trainMovement) {
getTrainMovements().add(trainMovement);
trainMovement.setTrainHeader(this);

return trainMovement;
}
}

我的火车运动java类的注释如下

@Entity
@Table(name="train_movement")
public class TrainMovement implements Serializable {
private int id;
private TrainHeader trainHeader;

@Id
public int getId() {
return this.id;
}

public void setId(int id) {
this.id = id;
}

@ManyToOne
@JoinColumn(name="header_id")
public TrainHeader getTrainHeader() {
return this.trainHeader;
}

public void setTrainHeader(TrainHeader trainHeader) {
this.trainHeader = trainHeader;
}
}

最后保存所有内容的代码如下所示

TrainMovement m = new TrainMovement();
TrainHeader h = new TrainHeader();
h.setTrainMovements(new LinkedList<TrainMovement>()); //otherwise get null pointer exception
h.addTrainMovement(m);
entityManager.persist(h);

我的问题是当发生这种情况时我收到错误

Caused by: org.hibernate.exception.ConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`trains`.`train_movement`, CONSTRAINT `header_link_movement` FOREIGN KEY (`header_id`) REFERENCES `train_headers` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

为什么会发生这种情况?这个错误不是仅在火车移动的 header_id 值不在表中时才会发生吗? hibernate 不应该帮我处理这个问题吗?我该如何解决这个问题?我尝试删除级联(以防保存对象的顺序出现错误),但保存标题对象,然后保存移动对象仍然会导致同样的错误!

任何有关此事的帮助都会很棒。

最佳答案

问题是 hibernate 没有创建 id,解决方案是添加注释@GenerateValue(strategy=GenerationType.IDENTITY)到我的 ID 字段

关于java - Hibernate 无法对具有外键的表进行持续工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com