我使用JPA的TopLink必要和SQL Server 2008中爲什麼JPA persist()不會生成自動增加主ID?
我的目標是獲取將要插入到表中的數據的自動增量主鍵值。我知道在JDBC,有getInsertedId()之類的方法,讓你自動增量的主ID的ID(但儘管執行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;
現在,如果我運行下面的代碼,它應該給我的自動遞增的ID 但它返回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()但沒有辦法獲得id已經持續??? hmm – 2011-02-02 05:39:31
您的代碼應該按照您的預期工作。我測試了它,並在提交之前得到了id,或者如果我回滾了。奇怪的是,它沒有。 – Joel 2011-02-02 11:02:42
如果tableId是一個int而不是Integer,它會有什麼區別嗎? – Joel 2011-02-02 11:05:11