我目前正在做一个项目,我遇到了这个错误:
org.hibernate.TransientObjectException: object references an unsaved transient instance – save the transient instance before flushing
发生了什么:1。)我在登录后设置了一个会话范围变量,比如SessionScopeVariableA。
2.)然后我有一个页面,我在其中添加一个实体,比如EntityA。
3.)EntityA有一个惰性字段sessionScopeVariableA,所以当我调用add方法时,我必须设置这个变量。
entityA.setSessionScopeVariableA(sessionScopeVariableA);
em.persist(entityA);
4.)请注意,SessionScopeVariableA被包装在会话范围生产者中,而操作是会话范围。
5.)无论我做什么,我总是以上面指定的瞬时错误结束。
知道吗?
解决这个问题的方法是使用焊料管理CDI的连接资源。我们就是这样做的:
//租户的限定符
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
public @interface CurrentTenant { }
//producer for the current tenant
@Produces
@Named("currentTenant")
@CurrentTenant
public Provider getCurrentTenant() { //.. }
//在单独的util类中,定义如何管理连接资源(cdi)
@ExtensionManaged
@ConversationScoped
@Produces
@PersistenceUnit(unitName="myEM")
@MyEMJpa
private EntityManagerFactory em;
//连接资源的接口
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
public @interface MyEMJpa { }
//在您的服务中注入实体管理器
@Inject
@MyEMJpa
protected EntityManager em;
//如何注入当前租户
@Inject
@CurrentTenant
private Provider currentTenant;
我正在Hibernate中尝试延迟加载实体,但无法克服上面的错误。我基本上在玩2个实体:用户和角色: 然后我有一个创建User实体的action bean,我们称之为方法1: 然后,在设置角色和更新之前,我尝试先持久化用户实体,但也失败了: 请注意: 用户服务。创建=持续 以下是完整的错误日志:
我有两个例子。一个是项目,一个是模块。< code >一对多关系。 我将模块设置到项目中。然后使用。第一次,因为数据库中没有记录,所以项目和模块可以保存到数据库中。然而,第二次,因为我不需要创建新项目,我只创建新模块,然后将模块设置回项目。 发生异常。 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 有什么办法可以解决这个问题吗谢谢
上图显示了表之间的关系。 AddressType表包含静态值,如mailing、home、work等。 在AddressTypeRel模型类中,我有一个带有多对一注释的AddressType对象
错误: 我还尝试了,但是 病因是什么?显然,我设置了nullable=true(在数据库中也是如此),尽管我有这个错误。有什么想法吗?
user.java是 我正在使用这个视频中提到的存储库,是 和 这个问题有什么更好的解决办法吗?
我试图将用户详细信息存储到以下表中:user、role、user_role。当试图保存详细信息时,它会引发以下错误。 托管刷新时出错[org.hibernate.transientPropertyValueException:object引用未保存的瞬态实例-在刷新前保存瞬态实例 这里user_role是父表,user和role表是子表。我尝试了cascade=cascade.all。即使它也会犯