当前位置: 首页 > 知识库问答 >
问题:

Hibernate:对象引用未保存的临时实例-在刷新之前保存临时实例

吕子真
2023-03-14

当我尝试使用hibernate postgresql获取列表时,我收到以下错误

MyObject:

@Entity
@Table(name = "my_objects", schema = "public")
public class MyObject implements java.io.Serializable {

private static final long serialVersionUID = 1L;
@Id
@Column(name = "my_object_id", unique = true, nullable = false)
@GeneratedValue
private long myObjectId;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "owner_id")
private User user;

@Column(name = "scheme_zone_name", length = 150)
private String schemeZoneName;

@Temporal(TemporalType.DATE)
@Column(name = "create_dt", length = 13)
private Date createDt;

@Column(name = "comment", length = 250)
private String comment;


public MyObject() {
}

public MyObject(long myObjectId) {
    this.myObjectId = myObjectId;
}

public MyObject(long myObjectId, User user,  String myObjectName, Date createDt, String) {
    this.schemeZoneId = schemeZoneId;
    this.user = user;
    this.myObjectName = myObjectName;
    this.createDt = createDt;
    this.comment = comment;
} ....getters/setters .....}

用户:

@Entity
@Table(name = "dp_users", schema = "public")
public class User implements java.io.Serializable {

private static final long serialVersionUID = 1L;
@Id
@Column(name = "user_id", unique = true, nullable = false, precision = 5, scale = 0)
@GeneratedValue
private int userId;

@Column(name = "user_login", nullable = false, length = 25)
private String userLogin;

@Column(name = "user_password", nullable = false, length = 25)
private String userPassword;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
private Set<MyObject> myObjects = new HashSet(0);

public User() {
}

public User(int userId, String userLogin, String userPassword) {
    this.userId = userId;
    this.userLogin = userLogin;
    this.userPassword = userPassword;
}

public User(int userId, String userLogin, String userPassword, Set<MyObject> myObjects) {
    this.userId = userId;
    this.userLogin = userLogin;
    this.userPassword = userPassword;
    this.myObjects = myObjects;
} ....getters/setters .....}

首先,我获取用户并将其保存在用户对象中:

public User login(String login, String password) {
    Session session = null;
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        return (User) session.createCriteria(User.class)
                .add(Restrictions.eq("userLogin", login).ignoreCase())
                .add(Restrictions.eq("userPassword", password)).uniqueResult();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (session != null && session.isOpen()) {
            session.close();
        }
    }
    return null;
}

然后,当我试图通过用户获取MyObject的列表时:

public List<MyObject> getMyObjects(User user) throws SQLException {
    List<MyObject> o = null;
    Session session = null;
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        o = session.createCriteria(MyObject.class)
                .add(Restrictions.eq("user", user))
                .addOrder(Order.asc("myObjectName"))
                .list();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (session != null && session.isOpen()) {
            session.close();
        }
    }
    return o;
}

我收到

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cc.testProject.common.User

我做错了什么?

共有1个答案

况喜
2023-03-14

您应该使用同一个会话来检索所有实体。会话范围必须与您的工作单元匹配,不要为每个操作实例化它。

请参阅努力理解实体管理器的正确使用

 类似资料:
  • 我在我的项目中使用Spring引导和Spring数据,我有两个类: 第二类是: 增加任务的方法: 当我试图添加一个新任务时,它在Json对象上面给出了一个错误: {"出发":"fff","到达":"ffff","isFreeWayEnable": false,"车站":[{"id": 1},{"id": 2}]}

  • 我有两个模型类,用户和问候如下。用户表中的外键(称呼_id)是可选的。为了在合并后立即刷新会话对象时保存用户对象,我得到以下错误信息。 对象引用未保存的临时实例-在刷新之前保存临时实例:com。实例模型打招呼 表中的数据称呼已经独立于用户表插入。当我试图保存salutation_id为空的用户对象时,它会抛出这个错误。 任何帮助都是值得的。 谢谢你的帮助。

  • 问题内容: 使用Hibernate保存对象时收到以下错误 问题答案: 你应该在集合映射中包括如果使用xml)或(如果使用注释)。 发生这种情况是因为你的实体中有一个集合,并且该集合具有一个或多个数据库中不存在的项目。通过指定上述选项,你可以告诉hibernate在保存其父项时将它们保存到数据库中。

  • 我对JPA和manytoone的关系感到困惑,我有一个类“Judiction”,它有很多“Judidget”,当我试图将一个Judidge实例存储到postgres db中时,它抛出错误消息如下: 判断类: 还有我的服务课: 在我的数据库中,我有判断表和用户表,我需要为多通关系创建一个作为判断用户的表吗?

  • 我读了很多关于我的问题的文件,但建议不能解决我的问题,所以我被迫打开这个主题。 我的问题是,当我试图保存我的实体时,我遇到了以下错误。我添加了实体类。谢谢 保存代码 员工表 员工上传表

  • 下面是代码: 我看到了很多帖子,但这并没有解决我的问题。感谢您的帮助。这里的RoleLookup是一个静态表。以下是例外: 组织。冬眠TransientObjectException:对象引用未保存的临时实例-在刷新之前保存临时实例:com。德国商业银行。清理CCP领域用户角色。roleLookup-