Tôi đang sử dụng JPA TopLink cần thiết và SQL Server 2008Tại sao JPA persist() không tạo ra ID chính tăng tự động?
Mục tiêu của tôi là để có được giá trị khóa chính auto-increment của dữ liệu có nghĩa là sẽ được chèn vào bảng. Tôi biết trong JDBC, có phương thức getInsertedId() giống như phương thức cung cấp cho bạn id của id chính tự động tăng (nhưng sau khi câu lệnh chèn được thực thi)
Trong JPA, tôi phát hiện ra @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;
Bây giờ nếu tôi chạy đoạn code dưới đây nó sẽ cho tôi tự động tăng lên id nhưng nó trả về 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 :(
Tôi có thể lấy id nếu tôi cam kết: em.getTransaction(). Cam kết() nhưng không có cách nào để lấy id đã tồn tại ??? hmm –
Mã của bạn sẽ hoạt động như bạn mong đợi. Tôi đã thử nghiệm nó và tôi nhận được id trước khi cam kết hoặc nếu tôi sau đó rollback. Lạ thật là không. – Joel
Nó có tạo ra sự khác biệt nào nếu tableId là một int chứ không phải là một số nguyên không? – Joel