对象引用未保存的瞬态实例:在刷新之前保存瞬态实例

2022-09-03 01:22:49

我有两个实体:PlayerProfileEntity和UserInfoEntity,我在userInfoEntity和PlaterProfileEntity上加入了一个连接,并将我的记录保存在数据库中,如下所示:

Session session = sessionFactory.openSession();
Transaction tr = session.beginTransaction();
Criteria crit = session.createCriteria(PlayerProfileEntity.class);
player.setUserId(new UserInfoEntity());
player.getUserId().setAddress(user.getUserId().getAddress());
session.save(player);
tr.commit();

我在我的 PlayerProfileEntity 类中使用了这个关联

@ManyToOne (fetch = FetchType.LAZY)
@Cascade({CascadeType.REFRESH})
@JoinColumn(name="userid")

我收到此错误:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save     the transient instance before flushing: com.shared.entity.UserInfoEntity

注意:如果我使用CascadeType.All,我会得到这个错误:

Cannot add or update a child row: a foreign key constraint fails

任何想法如何解决这个问题

谢谢


答案 1

每当您尝试在不保存适当的联接的情况下保存对象时,就会出现。您必须保存第一个连接,然后才能保存类。TransientObjectExceptionUserInfoEntityPlayerInfoEntity

player.setUserId(new UserInfoEntity());

通过使用,您可以将特定分配给 。但没有任何ID。如何映射两者?这就是为什么例外即将到来。UserInfoEntityPlayerInfoEntityUserInfoEntity

希望它能帮助你。


答案 2

您应该使用 CascadeType.PERSIST 或 CascadeType.ALL


推荐