質問と問題は非常に単純ですが、面倒ですが、アプリケーション全体の問題であるため、グローバルな解決策を探しています。
以下のコードは本当に興味深いものではありませんが、明確にするために投稿します!
JPA 2.0 で PostgreSQL データベースを使用し、すべてのファサードとエンティティを生成しました。
問題は、すべてのエンティティにその子の Collection が含まれていることですが、これは (私たちにとってのみ?) children 要素の作成後に更新されません。オブジェクトはデータベースに書き込まれ、簡単に選択できますが、本当に見たいのは、親オブジェクトの子の更新されたコレクションです。
なぜこうなった?親のエンティティを (手動で) リフレッシュするem.refresh(parent)
とうまくいきますが、Facades で多くの作業が必要になると思います。でも、もしかしたら他に方法がないのでしょうか?
ご支援ありがとうございます!
/* 編集 */
注釈の問題かキャッシュか何かに違いないと思いますが、すでに試しました
@OneToMany(mappedBy = "idquestion", orphanRemoval=true, fetch= FetchType.EAGER)
と
@Cacheable(false)
正しく動作しませんでした。
/* 編集 */
理解のためのサンプルコード。
データベース レベル:
CREATE TABLE Question (
idQuestion SERIAL,
questionContent VARCHAR,
CONSTRAINT Question_idQuestion_PK PRIMARY KEY (idQuestion)
);
CREATE TABLE Answer (
idAnswer SERIAL,
answerContent VARCHAR,
idQuestion INTEGER,
CONSTRAINT Answer_idAnswer_PK PRIMARY KEY (idAnswer),
CONSTRAINT Answer_idQuestion_FK FOREIGN KEY (idQuestion) REFERENCES Question(idQuestion)
);
Netbeans 7.1 でいくつかのエンティティを生成したよりも、それらはすべて次のようになります。
@Entity
@Table(name = "question", catalog = "jobfairdb", schema = "public")
@XmlRootElement
@NamedQueries({ BLAH BLAH BLAH...})
public class Question implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "idquestion", nullable = false)
private Integer idquestion;
@Size(max = 2147483647)
@Column(name = "questioncontent", length = 2147483647)
private String questioncontent;
@OneToMany(mappedBy = "idquestion", orphanRemoval=true)
private Collection<Answer> answerCollection;
Getters... setters...
それらのために(再び)生成されたファサードを使用し、すべて次のAbstractFacade
ように実装します。
public abstract class CCAbstractFacade<T> {
private Class<T> entityClass;
public CCAbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}