環境
- グラスフィッシュ 4.0
- JPA-Eclipselink 2.5.0
- MySQL 5.5.29
- MySQL から Survey テーブルへのトリガー:
トリガーのコード
CREATE TRIGGER `survey_BINS`
BEFORE INSERT ON survey
FOR EACH ROW
SET NEW.created = NOW();
問題:
- DB to table に新しい調査を挿入する 調査
- 作成されたフィールドは適切な値を取得しましたが、UI のエンティティはまだ日時が作成されていない古いものです
- サインアウトしてページを更新すると、作成された日時が表示されます
質問
- この状況を回避するにはどうすればよいですか?
- @PrePersist 表記は JPA エンティティの答えになるでしょうか?
- キャッシュをオフに切り替えると役立つ場合がありますが、パフォーマンスはどうですか?
- UIへの挿入/更新後に更新されたエンティティを取得する方法や解決策はありますか?
調査エンティティ
@Column(name = "created")
@Temporal(TemporalType.TIMESTAMP)
private Date created;
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
SurveyREST サービス
@Stateless
@Path("com.insame.entity.survey")
public class SurveyFacadeREST extends AbstractFacade<Survey> {
@PersistenceContext(unitName = "com.sesame_insame_war_1.0-SNAPSHOTPU")
private EntityManager em;
public SurveyFacadeREST() {
super(Survey.class);
}
@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Survey entity) {
super.create(entity);
}
@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Survey entity) {
super.edit(entity);
}
抽象的なファサード
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
ありがとう、サミ