Hibernate删除多个懒人集合

时间:2016-05-10 09:40:46

标签: java hibernate jpa

我的实体课程是:

@Entity
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    private Long id;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dt_creation", nullable = false)
    private Date dtCreation;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dt_maj", nullable = false)
    private Date dtMaj;

    // bi-directional many-to-one 
    @OneToMany(mappedBy = "quality", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<RQulityUser> RQualityUser;


@Entity
public class RQualityUser implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dt_creation", nullable = false)
    private Date dtCreation;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dt_maj", nullable = false)
    private Date dtMaj;

    // bi-directional many-to-one association to Questionnaire
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_user", updatable = false, nullable = false)
    private User user;

    // bi-directional many-to-one association to QualitePersonne
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cd_quality_user", updatable = false, nullable = false)
    private Quality quality;

当我找到一个用户并尝试清除RQualityUser列表时,我无法工作:

 User user = em.getByid(11);
 user.getRQualityUserList().clear();

Hibernate不会删除关系表中的记录吗?

2 个答案:

答案 0 :(得分:0)

“延迟加载”表示只有在您第一次实际访问实体时才会加载实体。

当你这样做时

<script type="text/javascript">
function findTotal(){
var ntot = 0
var a = $("input:radio[name ='ur']:checked").val();
var b = $("input:radio[name ='haem']:checked").val();
var c = $("input:radio[name ='haew']:checked").val();
var d = $("input:radio[name ='syb']:checked").val();
var e = $("input:radio[name ='orm']:checked").val();

var tot= ntot + a + b + c + d + e;

document.getElementById('total').value = tot;
}

</script>

所以你要清空空列表,之后当你使用它时会调用来自数据库的数据。

答案 1 :(得分:0)

如果你这样做

User user = em.getByid(11);
user.getRQualityUserList().clear();

打开持久化上下文并在事务内部,Hibernate应该删除记录。

如果您没有交易,则应使用它。

如果您使用封闭的持久性上下文执行clear(),则应更新user以删除记录。