Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么冬眠不';你不能删除我的空收藏吗?_Java_Hibernate_Jpa_Hibernate Mapping_Cascade - Fatal编程技术网

Java 为什么冬眠不';你不能删除我的空收藏吗?

Java 为什么冬眠不';你不能删除我的空收藏吗?,java,hibernate,jpa,hibernate-mapping,cascade,Java,Hibernate,Jpa,Hibernate Mapping,Cascade,我有一个一对多的映射,但hibernate不尝试删除…而是删除,hibernate尝试执行更新并将null设置为键..它会引发一个异常: Hibernate:updateparticipation\u released set idt\u released=null,其中idt\u released= 我怎样才能修好它?如果列表为空,我想删除所有集合 实际上,我的映射是这样的: Owner.java @OneToMany(cascade = {CascadeType.ALL}) @JoinCol

我有一个一对多的映射,但hibernate不尝试删除…而是删除,hibernate尝试执行更新并将null设置为键..它会引发一个异常:

Hibernate:updateparticipation\u released set idt\u released=null,其中idt\u released=

我怎样才能修好它?如果列表为空,我想删除所有集合

实际上,我的映射是这样的:

Owner.java

@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "idt_released")
public List<ParticipationReleased> getParticipationReleases() {
    return participationReleases;
}
Sondableid.java

@Embeddable
public class ParticipationReleasedPK implements Serializable {

private static final long serialVersionUID = 1L;

private Integer idtReleased;
private Integer idtColaborator;
private Integer idtPerformanceType;

public ParticipationReleasedPK() {
}

public ParticipationReleasedPK(Integer idtReleased, Integer idtColaborator,
        Integer idtPerformanceType) {
    super();
    this.idtReleased = idtReleased;
    this.idtColaborator = idtColaborator;
    this.idtPerformanceType = idtPerformanceType;
}

@Column(name = "idt_released", nullable = false)
public Integer getIdtReleased() {
    return idtReleased;
}

public void setIdtReleased(Integer idtReleased) {
    this.idtReleased = idtReleased;
}

@Column(name = "idt_colaborator", nullable = false)
public Integer getIdtColaborator() {
    return idtColaborator;
}

public void setIdtColaborator(Integer idtColaborator) {
    this.idtColaborator = idtColaborator;
}

@Column(name = "idt_performance_type", columnDefinition = "smallint", nullable = false)
public Integer getIdtPerformanceType() {
    return idtPerformanceType;
}

public void setIdtPerformanceType(Integer idtPerformanceType) {
    this.idtPerformanceType = idtPerformanceType;
}
}


例外情况:

 Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
at org.hibernate.persister.collection.AbstractCollectionPersister.remove(AbstractCollectionPersister.java:1052)
at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:170)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:64)
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:996)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1141)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:88)
... 119 more
Caused by: java.sql.BatchUpdateException: Column 'idt_released' cannot be null
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 133 more

您的问题是
ParticipationRelease
对象成为孤立对象,并且
CascadeType。所有
都不包括删除这些对象的操作

也许你应该使用:

@OneToMany(cascade = {CascadeType.ALL, CascadeType.DELETE_ORPHAN})
@JoinColumn(name = "idt_released")
public List<ParticipationReleased> getParticipationReleases() {
    return participationReleases;
}
@OneToMany(cascade={CascadeType.ALL,CascadeType.DELETE_ORPHAN})
@JoinColumn(name=“idt\U已发布”)
公共列表getParticipationReleases(){
返回参与发布;
}

已解决!谢谢你的帮助

@OneToMany(cascade = {CascadeType.ALL}, mappedBy="released")
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "idt_released", updatable = true, insertable = true)
public List<ParticipationReleased> getParticipationReleases() {
    return participationReleases;
}
@OneToMany(cascade={CascadeType.ALL},mappedBy=“released”)
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE\u孤儿)
@JoinColumn(name=“idt\u released”,updateable=true,insertable=true)
公共列表getParticipationReleases(){
返回参与发布;
}

将空集合设置为field而不是null。它已经是空集合,但仍在尝试执行更新!我试过使用“released.setParticipationReleases(null);”和“released.setParticipationReleases(new ArrayList());”。。。但是没有成功:(同样的问题是:@OneToMany@Cascade({org.hibernate.annotations.CascadeType.ALL,org.hibernate.annotations.CascadeType.DELETE_ORPHAN})@JoinColumn(name=“idt_released”)尝试使用:@JoinColumn(name=“idt_released”,updateable=true,insertable=true)如果问题仍然存在,您可以显示错误跟踪以了解更多信息相同的问题!我将在SonEmbeddedBableidi下粘贴错误异常。我认为删除JPA1上的孤立项是一个问题:(感谢回复解决方案!
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="released")
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "idt_released", updatable = true, insertable = true)
public List<ParticipationReleased> getParticipationReleases() {
    return participationReleases;
}