Java 如何在OpenJPA2.0.1中禁用缓存(编辑:BoneCP的问题)

Java 如何在OpenJPA2.0.1中禁用缓存(编辑:BoneCP的问题),java,jpa,jpa-2.0,openjpa,bonecp,Java,Jpa,Jpa 2.0,Openjpa,Bonecp,我无法在OpenJPA2.0.1中禁用缓存 我在persistence.xml中设置了以下属性: 它从不接收新数据(尽管如果我重新启动程序,它会接收) import java.util.List; 导入javax.persistence.*; @实体 @访问权限(AccessType.PROPERTY) @表(name=“TEST”) 公开课考试{ 私有int-id; 私有字符串名称; @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(nam

我无法在OpenJPA2.0.1中禁用缓存

我在persistence.xml中设置了以下属性:

它从不接收新数据(尽管如果我重新启动程序,它会接收)

import java.util.List;
导入javax.persistence.*;
@实体
@访问权限(AccessType.PROPERTY)
@表(name=“TEST”)
公开课考试{
私有int-id;
私有字符串名称;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”)
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
@列(name=“name”)
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
//简单测试用例
公共静态void main(字符串[]args)引发异常{
EntityManagerFactory=Persistence.createEntityManagerFactory(“su3”,null);
while(true){
EntityManager em=factory.createEntityManager();
TypedQuery q=em.createQuery(“从Test t中选择t”,Test.class);
List res=q.getResultList();
用于(测试t:res){
System.out.println(t.getId()+”,“+t.getName());
}
睡眠(1000);
em.close();
}
}
}
我做错了什么

EDIT1:如果我在while循环中创建一个新的EntityManagerFactory,它可以工作,但我的理解是,因为我已经将DataCache和QueryCache设置为false,所以我不需要这样做,而且这样做的成本很高

EDIT2:我正在使用作为连接池管理器,当我恢复使用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"/>


将partitionCount=3等添加到连接字符串中没有意义。这行代码是由驱动程序而不是池解析的。您是来解决这个问题的吗?我遇到了同样的问题:(
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();
        }
    }
}
<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"/>
<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"/>