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

hibernate-保存对象后获取id

弘靖琪
2023-03-14

出于某种目的,我需要在插入后立即获取对象的id。我可以使用以下代码:

 session.save(Object o)   // insert to database
 findByPorperty( o.property ) // Return the inserted object along with the id

我认为上面的代码不够,因为会话需要重新打开才能找到对象。所以:

  1. 有没有更好的办法获得身份证
  2. 如果有,我可以在插入一包对象后应用相同的策略来获取ID列表吗

共有3个答案

屈升
2023-03-14

或者用更好的方式我们可以这样

假设你的主键是一个整数,你保存的对象是“ticket”,那么你可以这样得到它。保存对象时,始终会返回id

//将在这里取消装箱,这样id将是值类型,而不是引用类型。现在您可以检查id是否为0,以防保存失败。如下所示:

int id = (Integer) session.save(ticket); 
if(id==0) 
   your session.save call was not success. 
else '
   your call to session.save was successful.
彭正谊
2023-03-14

假设你的主键是一个整数,你保存的对象是“票”,那么你可以这样得到它。当你保存对象时,总是返回一个可序列化的id

Integer id = (Integer)session.save(ticket);
薛涛
2023-03-14

会议结束了。save(object)返回对象的id,或者在执行save之后调用id getter方法。

Save()返回值:

Serializable save(Object object) throws HibernateException

返回:

the generated identifier

Getter方法示例:

用户详细信息实体:

@Entity
public class UserDetails {
    @Id
    @GeneratedValue
    private int id;
    private String name;

    // Constructor, Setters & Getters
}

测试id的逻辑:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();
UserDetails user1 = new UserDetails("user1");
UserDetails user2 = new UserDetails("user2");

//int userId = (Integer) session.save(user1); // if you want to save the id to some variable

System.out.println("before save : user id's = "+user1.getId() + " , " + user2.getId());

session.save(user1);
session.save(user2);

System.out.println("after save : user id's = "+user1.getId() + " , " + user2.getId());

session.getTransaction().commit();

此代码的输出:

保存前:用户id's=0,0

保存后:用户id=1,2

根据这个输出,您可以看到在我们保存UserDetails实体之前没有设置id,一旦保存实体,然后Hibernate设置对象的id-user1user2

 类似资料:
  • 问题内容: 由于目的,我需要在插入后立即获取对象的ID。我可以解决以下代码: 我认为上面的代码还不够,因为会话需要重新打开才能找到对象。所以: 有没有更好的方法来获取ID? 如果有的话,在插入一袋对象后是否可以应用相同的策略来获取ID列表? 问题答案: 该session.save(对象)返回对象的ID,或者你可以进行保存或者之后调用ID getter方法。 Save()返回值: 返回值: Gett

  • 我在保存具有ManyToOne双向关系的实体时遇到问题,如下所示: 警告:HHH000437:试图保存一个或多个与未保存的瞬态实体具有不可为空的关联的实体。在保存这些从属实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:([com . epam . apartments booking . model . city # 912])依赖实体:([[com . epam . apartme

  • 当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。 假设我保存有一些孩子的父级。所以当我一方面用inverse="true"cascade="all"设置一对多时,我希望孩子是关系的所有

  • 属性: 这是(Spring): 通过一个REST控制器和一个JSON,我想创建一个新的: 输出JSON: 我希望它们在保存操作之后被验证/返回。 要解决此问题,我必须在REST控制器中注入/声明,并调用方法(或者我必须调用方法以获得完整的持久化实体): 是否有一个自动的方法/注释,使用JPA或Spring或Hibernate,以便拥有“完整的”持久化实体? 我希望避免在每个REST或服务类中声明,

  • 本文向大家介绍在MongoDB中如何获取保存的对象?,包括了在MongoDB中如何获取保存的对象?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个变量。以下是查询- 以下是使用save()保存记录的查询- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 问题内容: 是否有任何使用hibernate的公认的,行之有效的方式来保存实体在数据库中的更改历史? 我们需要跟踪相当多的对象,并且希望能够撤消对对象的更改。 我尝试使用hibernate模式的拦截器,但是对象的旧状态仅在执行时可用。大多数情况下我们还是这样做… 我目前正在让warp-persist和Guice一起管理会议。 问题答案: 我已经完成了一个拦截器(基于EmptyInterceptor