私は以下のサービスを持っている...EntityManagerはいつコミットしますか?
@Stateless
@LocalBean
public class RandomService {
@EJB RandomString stringTokenizer;
@PersistenceContext
EntityManager em;
public String generate(Actions action)
{
Token token = new Token();
token.setAction(action);
token.setExpiry(new Date());
token.setToken(stringTokenizer.randomize());
em.persist(token);
//em.flush();
return String.format("%010d", token.getId()) + token.getToken();
}
}
私は(em.flushを入れていない場合は)私が戻る場合、私は知っているものの、その後の行token.getIdは()(DB生成されたシーケンスを使用して)nullを返しますidが設定されている呼び出し側サービスに文字列の代わりにトークン。だから、EMは、サービスがトークンオブジェクトを返すときにフラッシュするようですが、Stringを置いたときにはフラッシュしません。私が必要としているものを得るためには、それは正しいですか?
私はtoken = em.persist(token)と思われません。 Netbeans 7.0.1を使うと、これは最新のEJBでしかないと思いますか? – user432024
私は悪いですが、 'persist()'ではなく、新しいインスタンスを返す 'merge()'です。それにもかかわらず、明示的に 'flush()'する必要があります。 –
ありがとうございます。だから、私は上記のコードであなたの何があなたの場所で、またはより高いレベルで呼び出し元のフォーマットを行う必要がありますか? – user432024