JPA&x2B;MySQL:超时后-->;使用本地连接
由于我们的连接非常不稳定,我们决定在查询超时时切换到本地只读数据库 但我的问题是:当javax.persistence尝试查询时,我没有得到异常:JPA&x2B;MySQL:超时后-->;使用本地连接,mysql,hibernate,jpa,timeout,Mysql,Hibernate,Jpa,Timeout,由于我们的连接非常不稳定,我们决定在查询超时时切换到本地只读数据库 但我的问题是:当javax.persistence尝试查询时,我没有得到异常: // Attribute EntityManagerFactory entityManagerFactory; EntityManager manager; entityManagerFactory = Persistence .createEntityManagerF
// Attribute
EntityManagerFactory entityManagerFactory;
EntityManager manager;
entityManagerFactory = Persistence
.createEntityManagerFactory("org.hibernate.tutorial.jpa");
manager = entityManagerFactory.createEntityManager();
try {
Query query = manager.createQuery(String.format(
"SELECT u FROM User u WHERE u.id = '%s'", 116));
User user = (User) query.getSingleResult();
manager.refresh(user);
System.out.println(user.getUsername());
} catch (org.hibernate.QueryTimeoutException ex) {
throw new QueryTimeoutException("timeout");
}
}
这只是一个测试来证明我的问题。
我错过了什么
Mysql:Mysql-connector-java-5.1.16-bin.jar
JPA:javax.persistence_2.0.3.v201010191057.jar
休眠:
115 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
124 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.7.Final
126 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
129 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
132 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
208 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.6.7.Final
persistence.xml:
<properties>
<property name="hibernate.hbm2ddl.auto" value="valide"/>
<property name="hibernate.connection.url" value="jdbc:mysql:///database?zeroDateTimeBehavior=convertToNull"/>
<property name="hibernate.connection.username" value="user"/>
<property name="hibernate.connection.password" value="pass"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.query.timeout" value="1"/>
<property name="dialect" value="org.hibernate.dialect.MySQLDialect"/>
</properties>
115[main]INFO org.hibernate.annotations.common.Version-hibernate Commons annotations 3.2.0.Final
124[main]INFO org.hibernate.cfg.Environment-hibernate 3.6.7.Final
126[main]INFO org.hibernate.cfg.Environment-未找到hibernate.properties
129[main]INFO org.hibernate.cfg.Environment-字节码提供程序名称:javassist
132[main]INFO org.hibernate.cfg.Environment-使用JDK 1.4 java.sql.Timestamp处理
208[main]INFO org.hibernate.ejb.Version-hibernate EntityManager 3.6.7.Final
persistence.xml:
多谢各位
Tobias解决方案:
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://server/database", "user", "pass");
每次启动查询时,我都会测试连接是否处于活动状态:
if (connection.isValid(1)) {
return true;
} else {
throw new NoConnectionException();
您可能没有看到超时,因为某些数据库不支持该功能 “javax.persistence.query.timeout查询超时(毫秒) (整数或字符串),这是Hibernate使用的提示,但需要 基础数据库提供的支持。” 有关更多详细信息,请参阅 如果你不能保证可靠的连接,我倾向于一直切换到只读模式