Я использую JPA TOPLINK заменимых и SQL Server 2008Почему JPA persist() не генерирует первичный идентификатор автоинкремента?
Моя цель состоит в том, чтобы получить автоматическое приращение значение первичного ключа данных, который будет вставлен в таблицу. Я знаю, что в JDBC есть метод getInsertedId(), который дает вам идентификатор первичного идентификатора автоматического инкремента (но это происходит после выполнения инструкции insert).
В JPA я узнал, что @GenratedValue annotation
может сделать трюк.
@Entity
@Table(name = "tableOne")
public class TableOne implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "tableId")
private Integer tableId;
Теперь, если я запускаю этот код он должен дать мне авто увеличивается идентификатор но он возвращает NULL ...
EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
EntityTransaction txn = em.getTransaction();
txn.begin();
TableOne parent = new TableOne();
em.persist(parent); //here I assume that id is pre-generated for me.
System.out.println(parent.getTableId()); //this returns NULL :(
Я могу получить полученный id, если я совершу: em.getTransaction(). Commit(), но нет способа получить идентификатор уже с persist ??? hmm –
Ваш код должен работать так, как вы ожидаете. Я протестировал его, и я получу идентификатор, прежде чем совершить, или если я откажусь. Странно, что это не так. – Joel
Не имеет значения, если tableId является int, а не Integer? – Joel