Hibernate Cascade PERSIST [英] Hibernate Cascade PERSIST
问题描述
我有A类和B类,其中B依赖于A
我有一个关于Hibernate的常见问题,
在我的代码中,当我调用em.persist(objOfTypeA)时,我期望插入并插入到表AAA和BBB中。如果我手动设置A获得A的ID并将其填充到每个对象的列表中,然后保留该列表,那么事情就会起作用。
但是我希望Hibernate会发生这种情况。
我做错了什么?
或者我只是期望太多的Hibernate?
谢谢
@Entity
@Table(name =AAA)
@Veto
public class A {
@Id
@GeneratedValue
@Column(name =Id)
私人长ID;
@NotNull
@Column(name =Name)
私人长名称;
...
@OneToMany(mappedBy =a,fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
私人列表< B> b;
...
}
@Entity
@Table(name =BBB)
@Veto
public class B {
@Id
@GeneratedValue
@Column(name =Id)
私人长ID;
@NotNull
@Column(name =AId)
private长aId;
@NotNull
@Column(name =Name)
私人长名称;
@JoinColumn(name =AId,referencedColumnName =Id,updatable = false,insertable = false)
@ManyToOne(可选= false)
private A a;
...
}
我终于搞定了。
我得到或发现的例子都没有告诉我究竟出了什么问题,只是在我自己的实验之后才设法得出这个结论:
而不是
@OneToMany(mappedBy =a,fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST, CascadeType.MERGE,CascadeType.REMOVE})
私人列表< B> b;
不起作用(FK仍然是NULL)
这确实奏效:
@OneToMany(fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST ,CascadeType.MERGE,CascadeType.REMOVE})
@JoinColumn(name =AId)
@NotNull
private List< B> b;
I have a general question about Hibernate that I'm batteling with.
I have class A and class B, where B is dependent on A
In my code when I call em.persist(objOfTypeA) I would expect the insert to go and insert into both tables AAA and BBB. If I manually presist A get A's ID and fill it in the list for each object and then persist that list, things are working. But I would expect this to happen magically by Hibernate.
Am I doing something wrong? Or am I just expecting too much of Hibernate?
Thanks
@Entity
@Table(name = "AAA")
@Veto
public class A {
@Id
@GeneratedValue
@Column(name = "Id")
private Long id;
@NotNull
@Column(name = "Name")
private Long name;
...
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> b;
...
}
@Entity
@Table(name = "BBB")
@Veto
public class B {
@Id
@GeneratedValue
@Column(name="Id")
private Long id;
@NotNull
@Column(name="AId")
private Long aId;
@NotNull
@Column(name = "Name")
private Long name;
@JoinColumn(name = "AId", referencedColumnName="Id", updatable = false, insertable = false)
@ManyToOne(optional = false)
private A a;
...
}
I finally worked it out. None of the examples I was given or found told me exactly what was wrong, it was only after my own experimentation that I managed to come to this conclusion:
Instead of having
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> b;
that didn't work (FK was still coming as NULL)
This did work:
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="AId")
@NotNull
private List<B> b;
这篇关于Hibernate Cascade PERSIST的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!