PostgreSQL 9.1
Glassfish 3.1.2.2
火狐 10.0.0.7
Linux
我正在使用 JPA 在 PostgreSQL 中持久化实体。但是,有一个由触发器填充的表(名为 Position),我使用该表的一个实体作为只读的。实体从不将数据持久保存到此表中,因为它是从触发器加载和操作的。我可以将数据加载到我的托管 bean 并查看 Position 表数据。
我遇到的问题是,一旦触发器修改了数据库(位置表),当再次查询位置表时,值仍然相同。Position 实体仍然包含旧值并且没有重新加载。
这是处理 Position 实体的 bean。我添加了 em.flush() 没有帮助,并且不确定如何以这种方式使用 em.refresh() 。实际上,无论如何,同步将如何提供帮助,因为它不知道我想在没有查询的情况下同步到什么。
非常感谢任何帮助。
EJB...
@Stateless
public class PositionBean implements IPosition {
@PersistenceContext(unitName="positionbean-pu")
private EntityManager em;
public Position getPositionById(Integer posId) {
Position pos = null;
try {
pos = (Position) em.createNamedQuery("findPosition")
.setParameter("posId", posId).getSingleResult();
}
catch (Exception e) {
throw new EJBException(e.getMessage());
}
return pos;
}
实体 bean ...
@Entity
@SequenceGenerator(name="posIdGen", initialValue=10000,
sequenceName="pos_seq", allocationSize=1)
@NamedQuery(name="findPosition",
query="SELECT p FROM Position p WHERE p.posId = :posId")
@Table(name="Position")
public class Position implements Serializable {
// ...
持久性.xml
<persistence-unit name="positionbean-pu" transaction-type="JTA">
<jta-data-source>jdbc/postgreSQLPool</jta-data-source>
</persistence-unit>