これはスタンドアロンのJavaアプリケーションであり、Webアプリケーションではありません。私はT t
オブジェクト内のこのJPA:スタンドアロンJavaアプリケーションで永続化した後にIdを取得する方法
public <T> T create(T t) {
em.getTransaction().begin();
em.persist(t);
em.flush();
em.getTransaction().commit();
return t;
}
id
のようなオブジェクトを永続化するときに、正しいデータとidを持つ新しい行がデータベース内で正しく作成されていても、まだnullです。通常、私の永続コンテキストにエンティティオブジェクトを永続させるので、@EJB
を利用する私のWebアプリケーションでは、id
を利用できるようになりました。ここに永続コンテキストがあるかどうかわかりません。
これは、私も、私はこれは私が入手する方法です。この
CREATE TABLE Config
(
ID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID)
)
のように、データベースAUTO_INCREMENT
で、このテーブルのIDを作る私の@Entityクラス
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
内の私の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>
助けてください、私はここで私が間違って何をしたかわかりません。
リフレッシュが不要です。ただフラッシュする()。それは永続性を強制し、idを取得します(ユーザーがもちろんGeneratedValueアノテーションを追加した後)。 – DataNucleus
@DataNucleus:私は '@ SequenceGenerator'を使うことができないので、以下の答えを投稿しました。' @TableGenerator 'を '@ GeneratedValue'と一緒に使っています。しかし、毎回 'flush()'を呼び出すと、パフォーマンスの問題DataNucleusが発生しますか? –
@DataNucleus:flush()が私のために働いていました。あなたは答えを投稿するべきです。 Thang Pham氏の業績への懸念にも十分にお答えいただければ幸いです。 – user2316667