Używam Toplink WZP-essential i SQL Server 2008Dlaczego JPA persist() nie generuje głównego pierwotnego ID?
Moim celem jest uzyskanie automatycznego przyrostu pierwotną wartość klucza danych, który ma być wstawiony do tabeli. Wiem, że w JDBC istnieje metoda getInsertedId(), która daje identyfikator automatycznego przyrostowego identyfikatora głównego (ale to jest po wykonaniu instrukcji insert).
W JPA dowiedziałem się, że @GenratedValue annotation
może załatwić sprawę.
@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;
Teraz, jeśli mogę uruchomić poniższy kod powinien dać mi auto zwiększane id ale zwraca 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 :(
Mogę uzyskać id uzyskanego, jeśli commit: em.getTransaction(). Commit(), ale nie ma sposobu, aby uzyskać id już z persist? hmm –
Twój kod powinien działać zgodnie z oczekiwaniami. Przetestowałem to i otrzymałem identyfikator przed zatwierdzeniem lub jeśli następnie wycofałem. Dziwne, że tak nie jest. – Joel
Czy robi różnicę, jeśli tableId jest int, a nie Integer? – Joel