gpt4 book ai didi

java - 为什么 Hibernate 不填充这个外键列

转载 作者:行者123 更新时间:2023-11-29 02:25:50 25 4
gpt4 key购买 nike

这个问题似乎经常发生,但我找不到适合我的情况的有效解决方案。问题是 Hibernate 将一个外键列的外键留空 (null)。奇怪的是,我在另一个程序中对这两个受影响的表使用了相同的设置,并且工作正常。唯一不同的是我现在添加了另外 2 个表。

我检查了 MySQL 输出(通过 show_sql 选项),Hibernate 在子表之前插入了父表。所以 key 应该在那里。

家长:

public class Page {

@Id
@GeneratedValue
@Column(name="page_id")
private Integer id;

//****** THIS IS THE CHILD
@OneToMany(orphanRemoval=true, mappedBy="pageId", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Tag> tag = new HashSet<Tag>();


//****** THESE ARE THE NEW TABLES
@OneToOne(cascade=CascadeType.ALL)
private Video video;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="creator_id")
private Creator creator;

child :

public class Tag {

@Id
@GeneratedValue
private Integer id;

@Index(name = "tag")
@Column
private String tag;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="page_id")
private Page pageId;

如何保存(需要saveOrUpdate):

public static void save(SessionFactory sessionFactory, Page page) {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.saveOrUpdate(page);
session.getTransaction().commit();
session.close();
}

非常感谢每个建议!

最佳答案

您正在管理协会的双方吗?这意味着您添加了 TagSet<Tag>Page并设置 Page Tag 上的字段?

通过之前Pagesave您应该按如下方式管理关系的方法:

Page page = new Page();
Tag tag = new Tag();

//managing the both sides of the relationship
tag.setPage(page); //Setting Tags page field
page.getTags().add(tag); //Adding tag to the `Set<Tag>`

关于java - 为什么 Hibernate 不填充这个外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260301/

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