如何在OpenJPA 2.0.1中禁用缓存(编辑:BoneCP问题)

我无法在OpenJPA 2.0.1中禁用缓存。 我在persistence.xml中设置了以下属性:
<property name="openjpa.DataCache" value="false"/>
<property name="openjpa.QueryCache" value="false"/>
<property name="openjpa.jdbc.QuerySQLCache" value="false"/> <!-- I don't believe this is  necessary -->
我可以看到,当我启动应用程序时,会记录这些属性的正确值。 我创建了一个基本实体来测试它,使用main方法每秒查询一次表。我正在每次迭代时创建一个新的EntityManager。当我针对空的TEST表运行它,然后手动将数据插入到test中时:
insert into TEST values (1,'a');
它永远不会接受新数据(尽管如果我重新启动程序它会这样做)。
import java.util.List;    
import javax.persistence.*;

@Entity
@Access(AccessType.PROPERTY)
@Table(name="TEST")
public class Test {

    private int id;
    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="ID")
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    @Column(name="NAME")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    // SIMPLE TEST CASE
    public static void main(String[] args) throws Exception {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("su3", null);
        while(true) {
            EntityManager em = factory.createEntityManager();
            TypedQuery<Test> q = em.createQuery("select t from Test t", Test.class);
            List<Test> res = q.getResultList();
            for (Test t :res) {
                System.out.println(t.getId()+", " + t.getName());
            }
            Thread.sleep(1000);
            em.close();
        }
    }
}
我究竟做错了什么? 编辑1:如果我在while循环中创建一个新的EntityManagerFactory,它可以工作,但我的理解是,因为我已经将DataCache和QueryCache设置为false,所以我不需要这样做,而且这样做很昂贵。 EDIT2:我使用BoneCP作为我的连接池管理器,当我恢复使用DHCP或C3P0时问题就消失了。不知道为什么...... EDIT3:这是我用于BoneCP的配置:
<property name="openjpa.ConnectionDriverName" value="com.jolbox.bonecp.BoneCPDataSource"/>
<property name="openjpa.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,jdbcUrl=jdbc:mysql://localhost:3306/mydb,Username=xxxx,Password=yyyy,partitionCount=3"/>
    
已邀请:
我通过使用以下配置恢复到c3p0驱动程序来解决我的问题:
<property name="openjpa.ConnectionDriverName"  value="com.mchange.v2.c3p0.ComboPooledDataSource"/>
<property name="openjpa.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,jdbcUrl=jdbc:mysql://localhost:3306/dbname,characterEncoding=UTF8,useUnicode=true,user=username,password=password,autocommit=false,automaticTestTable=testtable,idleConnectionTestPeriod=60"/>
<property name="openjpa.DataCache" value="false"/>
    

要回复问题请先登录注册