簡體   English   中英

JPA如何獲取自動生成的持久對象ID?

[英]How does JPA gets auto-generated ID of persisted object?

我一直在研究JDBC和Spring JPA,讓我想到的是Spring如何獲取已保存對象的ID。 我擴展了JpaRepository:

interface UserAccountRepository
    extends JpaRepository<UserAccount, Integer> {
}

並保存了我的對象:

userAccountRepository.save(new UserAccount(
        null,
        username,
        passwordEncoder.encode(password)
));

MySQL日志顯示以下操作:

2017-04-08T12:54:52.107156Z 78查詢SET自動提交= 0

2017-04-08T12:54:52.206061Z 78查詢插入到user_account(密碼,用戶名)值('encryptedpassword','user')中

2017-04-08T12:54:52.206823Z 78查詢提交

2017-04-08T12:54:52.211045Z 78查詢SET自動提交= 1

由於插入操作不返回任何內容(或者我缺少什么?),Spring如何在沒有任何其他查詢的情況下知道該ID?

查看Hibernate ORM的源代碼 (我猜這是您與Spring一起使用的源代碼 ),看起來它執行此查詢來知道最后插入的id:

select last_insert_id()

JDBC可以返回作為語句一部分生成的鍵。 這是一個例子:

  try(PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
    setParameters(parameterValues, statement);

    statement.execute();

    try(ResultSet rs = statement.getGeneratedKeys()) {
      if(rs.next()) {
        return rs.getObject(1);  // <-- contains the generated key
      }

      return null;
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM