Я использую jpa и eclipselink. он говорит, что версия 2.0.2.v20100323-r6872 для eclipselink. это приложение SE, маленький. местная единица персистенции. Я использую базу данных Postgres. у меня есть некоторый код, который просыпается один раз в секунду и делает запрос jpa к таблице. это опрос, чтобы видеть, изменяются ли некоторые поля в данной записи. но когда я обновляю поле в sql, оно продолжает показывать одно и то же значение каждый раз, когда я запрашиваю его. и это после ожидания, создания нового менеджера сущностей и подсказки запроса. когда я запрашиваю таблицу из sql или python, я вижу измененное поле. но из моего jpa-запроса, после того как я прочитал значение, оно никогда не изменится в последующих выполнениях запроса - даже если менеджер сущностей был воссоздан. Я пытался сказать это, чтобы не смотреть в кеш. но, похоже, это игнорирует. очень загадочно, не могли бы вы помочь, пожалуйста?
вот метод. я звоню это раз в 3 секунды. tgt.getTrlDlrs () println показывает мне, что я получаю одно и то же значение для этого поля при каждом вызове метода («значение не изменится»). даже если я изменю поле в базе данных. Когда я запрашиваю запись из-за пределов Java, я сразу вижу изменения. также, если я остановлю Java-программу и перезапущу ее, я сразу же выведу новое значение:
public void exitChk(EntityManagerFactory emf, Main_1 mn){
// this will be a list of the trade close targets that are active
List<Pairs01Tradeclosetgt> mn_res = new ArrayList<Pairs01Tradeclosetgt>();
//this is a list of the place number in the array list above
//of positions to close
ArrayList<Integer> idxsToCl = new ArrayList<Integer>();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.clear();
String qryTxt =
"SELECT p FROM Pairs01Tradeclosetgt p WHERE p.isClosed = :isClosed AND p.isFilled = :isFilled";
Query qMn = em.createQuery(qryTxt);
qMn.setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache);
qMn.setParameter("isClosed", false);
qMn.setParameter("isFilled", true);
mn_res = (List<Pairs01Tradeclosetgt>) qMn.getResultList();
// are there any trade close targets we need to check for closing?
if (mn_res!=null){
//if yes, see whether they've hit their target
for (int i=0;i<mn_res.size();i++){
Pairs01Tradeclosetgt tgt = new Pairs01Tradeclosetgt();
tgt = mn_res.get(i);
System.out.println("value won't change:" + tgt.getTrlDlrs());
вот мой класс сущности (частичный):
@Entity
@Table(name = "pairs01_tradeclosetgt", catalog = "blah", schema = "public")
@NamedQueries({
@NamedQuery(name = "Pairs01Tradeclosetgt.findAll", query = "SELECT p FROM Pairs01Tradeclosetgt p"),
@NamedQuery(name = "Pairs01Tradeclosetgt.findByClseRatio", query = "SELECT p FROM Pairs01Tradeclosetgt p WHERE p.clseRatio = :clseRatio")})
public class Pairs01Tradeclosetgt implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id")
@SequenceGenerator(name="pairs01_tradeclosetgt_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "pairs01_tradeclosetgt_id_seq")
private Integer id;
и мой блок сопротивления:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="testpu" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>mourv02.Pairs01Quotes</class>
<class>mourv02.Pairs01Pair</class>
<class>mourv02.Pairs01Trderrs</class>
<class>mourv02.Pairs01Tradereq</class>
<class>mourv02.Pairs01Tradeclosetgt</class>
<class>mourv02.Pairs01Orderstatus</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://192.168.1.80:5432/blah"/>
<property name="javax.persistence.jdbc.password" value="secret"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="noone"/>
</properties>
</persistence-unit>
</persistence>