这个问题似乎经常发生,但是我找不到适合我的案例的解决方案。问题在于,Hibernate将一个外键列的外键留空(空)。奇怪的是,我在另一个程序中使用了这两个受影响的表的相同设置,并且工作正常。唯一的不同是,我现在添加了另外两个表。
我检查了MySQL的输出(通过show_sql选项),然后Hibernate在子级之前插入了父级表。所以钥匙应该在那儿。
上级:
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;
孩子:
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;
保存方式(必须保存或更新):
public static void save(SessionFactory sessionFactory, Page page) {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.saveOrUpdate(page);
session.getTransaction().commit();
session.close();
}
每个建议都受到高度赞赏!
您在管理协会的双方吗?意思是您将in添加Tag
到Set<Tag>
inPage
并将Page
字段设置在Tag
?上。
在Page
使用该save
方法之前,您应该按照以下方式管理关系:
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>`
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句