问题和问题非常简单,虽然很烦人,我正在寻找一个全局解决方案,因为它对我们来说是应用程序范围的问题。
下面的代码真的很不有趣,但我将其发布为澄清!
我们使用带有 JPA 2.0 的 PostgreSQL 数据库,我们生成了所有的外观和实体,当然我们做了一些编辑,但实际上并没有太多。
问题是每个实体都包含其子元素的集合,但是(仅对我们而言?)在创建子元素后不会更新。对象被写入数据库,您可以轻松选择它们,但我们真正希望看到的是父对象中刷新的子对象集合。
为什么会这样?如果我们(手动)刷新父实体,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);
}