Hibernate Cascade PERSIST [英] Hibernate Cascade PERSIST

查看:96
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆