我使用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