这是一个独立的Java应用程序,而不是Web应用程序。所以,当我坚持的对象这样JPA:如何在独立Java应用程序中保留ID后
public <T> T create(T t) {
em.getTransaction().begin();
em.persist(t);
em.flush();
em.getTransaction().commit();
return t;
}
的id
的T t
对象内仍无效,即使新行正确的数据,ID是数据库中正确创建。通常在我的网络应用程序中,使用@EJB
,id
在我坚持后立即可用,因为它将实体对象持久化到我的持久化上下文中,我不确定在这里是否有我的持久化上下文?
这是我映射我的ID我@Entity类中
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
也是我做这个表的id在数据库AUTO_INCREMENT
,这样
CREATE TABLE Config
(
ID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
我这是怎么获得我的EntityManager
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CorePU");
em = emf.createEntityManager();
这里是我的内部persistence.xml
<persistence-unit name="CorePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.wf.docsys.core.model.Config</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/XNINFODB"/>
<property name="javax.persistence.jdbc.password" value="xxx"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="xxx"/>
</properties>
请帮帮忙,我不知道我做错了什么在这里。
刷新是不必要的。只要做flush()。这迫使坚持,并因此获得id(一旦用户添加了GeneratedValue注解当然)。 – DataNucleus 2012-04-06 10:59:53
@DataNucleus:是的,我发布了我的答案,因为我不能使用'@ SequenceGenerator',我使用'@ GeneratedValue'@TableGenerator并且它可以工作。但是,每次调用'flush()'都会导致性能问题,DataNucleus? – 2012-04-06 13:05:26
@DataNucleus:flush()为我工作。你应该发布一个答案。如果你精通足够的话也可以解决Thang Pham的表现问题。 – user2316667 2014-06-23 19:11:28