Я использую JPA (EclipseLink) и Spring. Скажем, у меня есть простой объект с автоматически генерируемым ID:JPA - Возврат автоматически сгенерированного идентификатора после сохранения()
@Entity
public class ABC implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
// ...
}
В моем классе DAO, у меня есть метод, который вызывает вставку persist()
на этой сущности. Я хочу, чтобы метод возвращал сгенерированный идентификатор для нового объекта, но когда я его тестирую, он вместо этого возвращает 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);
}
}
схожих, может ссылаться http://stackoverflow.com/q/3328813/366964 –
Спасибо за ответы. И как сложное решение (а не JPA), мы можем использовать другой уникальный идентификатор, такой как временная отметка unix. – sura2k
Возможный дубликат [Когда JPA установлен @GeneratedValue @Id] (http://stackoverflow.com/questions/9087848/when-does-the-jpa-set-a-generatedvalue-id) – Raedwald