Java hibernate4简单级联保持don';t工作

Java hibernate4简单级联保持don';t工作,java,hibernate,cascade,Java,Hibernate,Cascade,只有将Tab.java更改为@OneToOne(cascade=CascadeType.ALL)时,此代码才有效。我不明白为什么,在测试中我创建了一个分离的标记实例,并在tab中设置。我认为这应该适用于级联类型PERSIST。但我明白了 org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushi

只有将Tab.java更改为@OneToOne(cascade=CascadeType.ALL)时,此代码才有效。我不明白为什么,在测试中我创建了一个分离的标记实例,并在tab中设置。我认为这应该适用于级联类型PERSIST。但我明白了

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: dominio.Tag
at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:294)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:537)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:311)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:321)
at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4243)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:546)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:232)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:159)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at TabTest.setUpSuite(TabTest.java:28)
班级

@MappedSuperclass
public class BasicEntity {

@Id
@GeneratedValue
private Integer id;

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof BasicEntity)) return false;

    BasicEntity that = (BasicEntity) o;

    if (!id.equals(that.id)) return false;

    return true;
}

@Override
public int hashCode() {
    return id.hashCode();
}
}
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
@Entity
public class Tab extends BasicEntity{

private String name;

@OneToOne(cascade = CascadeType.PERSIST)
private Tag tag;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


public Tag getTag() {
    return tag;
}

public void setTag(Tag tag) {
    this.tag = tag;
}

}
班级

@MappedSuperclass
public class BasicEntity {

@Id
@GeneratedValue
private Integer id;

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof BasicEntity)) return false;

    BasicEntity that = (BasicEntity) o;

    if (!id.equals(that.id)) return false;

    return true;
}

@Override
public int hashCode() {
    return id.hashCode();
}
}
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
@Entity
public class Tab extends BasicEntity{

private String name;

@OneToOne(cascade = CascadeType.PERSIST)
private Tag tag;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


public Tag getTag() {
    return tag;
}

public void setTag(Tag tag) {
    this.tag = tag;
}

}
奥特级

import javax.persistence.Entity;


@Entity
public class Tag extends BasicEntity {

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
试验

如果要使用
CascadeType.persist,请使用
persist()
而不是
save()

或 如果要使用
保存(选项卡)

对于
save()
操作,对应的级联类型是
save\u UPDATE
,对于
persist()
操作,对应的级联类型是
persist