有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对象引用一个未保存的临时实例:在刷新之前保存临时实例

我有两个实体:PlayerProfileEntity&;用户信息实体 我加入了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。好吧,我有个错误:

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

你知道我该怎么解决这个问题吗

谢谢


共 (3) 个答案

  1. # 1 楼答案

    public void savePlayerMethod(PlayerInfoEntity player){
    
    if(player == null){
       player = new PlayerInfoEntity();
    }
    player.setUserId(getSavedUserInfo());
    Session session = SessionFactory.openSession();
    Transaction transaction = session.beginTransaction();
    session.save(userInfo);
    transaction.committ();
    }
    
    public UserInfoEntity getSavedUserInfo(){
    UserInfoEntity userInfo = new UserInfoEntity();
    Session session = SessionFactory.openSession();
    Transaction transaction = session.beginTransaction();
    session.save(userInfo);
    transaction.committ();
    }
    
  2. # 2 楼答案

    我也面临同样的问题,经过大量调试后,我发现从实体中删除@AllArgsConstructor并添加

    @Tolerate
    public <ClassName>() {
    }
    

    为我工作

  3. # 3 楼答案

    每当您试图保存对象而不保存适当的联接时,TransientObjectException就会出现。必须先保存UserInfoEntity,然后才能保存PlayerInfoEntity

    player.setUserId(new UserInfoEntity());
    

    通过使用它,您将特定的UserInfoEntity分配给PlayerInfoEntity。但是UserInfoEntity没有任何ID。如何映射两者?这就是特例即将到来的原因

    希望对你有帮助