【发布时间】:2012-04-01 17:05:18
【问题描述】:
我正在使用 JPA (EclipseLink) 和 Spring。假设我有一个带有自动生成 ID 的简单实体:
@Entity
public class ABC implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
// ...
}
在我的 DAO 类中,我有一个在此实体上调用 persist() 的插入方法。我希望该方法返回为新实体生成的 ID,但是当我对其进行测试时,它会返回 0。
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 的服务类,如果这有影响的话:
public class ABCService {
@Resource(name="ABCDao")
ABCDao abcDao;
public int addNewABC(ABC abc) {
return abcDao.insertABC(abc);
}
}
【问题讨论】:
-
感谢您的回答。作为一个棘手的解决方案(不是 JPA),我们可以使用另一个唯一的 id,比如 unix 时间戳。
-
请参考下面的链接,貌似是同一个问题stackoverflow.com/questions/9732453/…