1

我在使用 Hibernate 持久化实体权限时遇到问题。我需要保存许多权限对象,其中有一个属性组(外键),但在保存权限的同时,我正在保存组,所以我没有要设置的组 ID(主键)建立关联的权限对象。

我的关系:

@Entity
@BatchSize(size = 10)
public class Group implements Serializable {

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "grupo")
    @JsonIgnore
    private List<Permissao> permissoes;
}

@Entity
@BatchSize(size = 10)
public class Permission implements Serializable {

    @ManyToOne
    private Grupo grupo;
}

堆:

SEVERE: Servlet.service() for servlet [hemisphere-web] in context with path 
[/hemisphere-web] threw exception [Request processing failed; nested exception is 
org.springframework.dao.InvalidDataAccessApiUsageException: 
org.hibernate.TransientPropertyValueException: object references an unsaved transient 
instance - save the transient instance before flushing: 
net.pontoall.hemisphere.core.model.Permission.grupo -> 
net.pontoall.hemisphere.core.model.Grupo; nested exception is 
java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object 
references an unsaved transient instance - save the transient instance before flushing: 
net.pontoall.hemisphere.core.model.Permissao.grupo -> 
net.pontoall.hemisphere.core.model.Grupo] with root cause
org.hibernate.TransientPropertyValueException: object references an unsaved transient 
instance - save the transient instance before flushing: 
net.pontoall.hemisphere.core.model.Permissao.grupo ->        net.pontoall.hemisphere.core.model.Grupo

有人可以给我一个提示吗?

4

2 回答 2

1

首先,当您使用 JPA/Hibernate 时,您正在使用对象。您无需为权限对象设置组 ID,只需将其传递给组实例即可。

现在根据您的映射,您在组中的权限列表上有级联,因此您应该保存该组,它应该可以正常工作。如果您在不先保存组的情况下尝试保存权限,那么您可能会收到 TransientObjectException。

于 2013-05-16T13:14:21.967 回答
1

或者,您也可以使用从 Permission 到 Group 的级联,这样当您保存属于新 Group 的新 Permission 时,该 Group 也将被持久化:

@ManyToOne(cascade=CascadeType.PERSIST)
private Group group;
于 2013-05-16T15:08:33.530 回答