Estoy usando JPA (EclipseLink) y Spring. Digamos que tiene una entidad sencilla con un ID autogenerado:JPA - Devolviendo una identificación generada automáticamente después de persist()
@Entity
public class ABC implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
// ...
}
En mi clase DAO, tengo un método de inserción que llama persist()
en esta entidad. Quiero que el método devuelva el ID generado para la nueva entidad, pero cuando lo pruebo, devuelve 0
en su lugar.
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; // ???
}
}
que también tienen una clase de servicio que envuelve la DAO, si eso hace la diferencia:
public class ABCService {
@Resource(name="ABCDao")
ABCDao abcDao;
public int addNewABC(ABC abc) {
return abcDao.insertABC(abc);
}
}
uno similar, puede referirse a http://stackoverflow.com/q/3328813/366964 –
Gracias por las respuestas. Y como una solución difícil (no una JPA) podemos usar otra identificación única como la marca de tiempo de unix. – sura2k
posible duplicado de [¿Cuándo establece el JPA un @GeneratedValue @Id] (http://stackoverflow.com/questions/9087848/when-does-the-jpa-set-a-generatedvalue-id) – Raedwald