首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA -在persist()之后返回一个自动生成的id

JPA -在persist()之后返回一个自动生成的id
EN

Stack Overflow用户
提问于 2012-03-16 13:36:50
回答 7查看 144.1K关注 0票数 126

我使用的是JPA (EclipseLink)和Spring。假设我有一个简单的实体,它有一个自动生成的ID:

代码语言:javascript
运行
复制
@Entity
public class ABC implements Serializable {
     @Id
     @GeneratedValue(strategy=GenerationType.IDENTITY)
     private int id;

     // ...
}

在我的DAO类中,我有一个insert方法,它在这个实体上调用persist()。我希望该方法返回为新实体生成的ID,但是当我测试它时,它返回0

代码语言:javascript
运行
复制
public class ABCDao {
    @PersistenceContext
    EntityManager em;

    @Transactional(readOnly=false)
    public int insertABC(ABC abc) {
         em.persist(abc);
         // I WANT TO RETURN THE AUTO-GENERATED ID OF abc
         // HOW CAN I DO IT?
         return abc.id; // ???
    }
}

我还有一个包装DAO的服务类,如果这有什么不同的话:

代码语言:javascript
运行
复制
public class ABCService {
    @Resource(name="ABCDao")
    ABCDao abcDao;

    public int addNewABC(ABC abc) {
         return abcDao.insertABC(abc);
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-16 16:27:03

ID仅保证在刷新时生成。持久化实体只会使其“附加”到持久化上下文。所以,要么显式地刷新实体管理器:

代码语言:javascript
运行
复制
em.persist(abc);
em.flush();
return abc.getId();

或者返回实体本身而不是其ID。当事务结束时,将发生刷新,因此事务之外的实体的用户将在实体中看到生成的ID。

代码语言:javascript
运行
复制
@Override
public ABC addNewABC(ABC abc) {
    abcDao.insertABC(abc);
    return abc;
}
票数 204
EN

Stack Overflow用户

发布于 2016-04-11 18:21:09

代码语言:javascript
运行
复制
@Entity
public class ABC implements Serializable {
     @Id
     @GeneratedValue(strategy=GenerationType.IDENTITY)
     private int id;   
}

检查@GeneratedValue表示法在您的实体中是否存在class.This告诉JPA您的实体属性自动生成的行为

票数 14
EN

Stack Overflow用户

发布于 2015-08-11 22:46:45

我是这样做的:

代码语言:javascript
运行
复制
EntityManager entityManager = getEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist(object);
transaction.commit();
long id = object.getId();
entityManager.close();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9732453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档