我有愚蠢的错误、bug,或者我的无知中的漏洞。 可能是第三。
已解决: 来自 http://www.h2database.com/html/cheatSheet.html
Embedded
jdbc:h2:~/test 'test' in the user home directory
...
**In-Memory**
jdbc:h2:mem:test multiple connections in one process
...
因此,我创建了内存数据库,当您重新启动程序时,它会自动清理。
我通常有支持类(class):
@Entity
public class UserDetalis {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
}
通常为 hibernate.cfg.xml
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:mem:db1</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<mapping class="org.zyxerdima.dto.UserDetalis" />
</session-factory>
主类:
...
Session session = sessionFactory.openSession();
session.beginTransaction();
for (int i = 0; i < 10; i++){
UserDetalis user = new UserDetalis();
user.setUserName("User " + (i + 1));
session.save(user);
}
session.getTransaction().commit();
session.close();
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery("from UserDetalis");
List users = query.list();
session.getTransaction().commit();
session.close();
System.out.println(users.size());
执行,输出为:
...
10x Hibernate: insert into UserDetalis (userId, userName) values (null, ?)
Hibernate: select userdetali0_.userId as userId1_0_, userdetali0_.userName as userName2_0_ from UserDetalis userdetali0_
10
10 - 数组的正确大小
此后我改变了
<property name="hbm2ddl.auto">update</property>
并且仅在主类中执行
...
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery("from UserDetalis");
List users = query.list();
session.getTransaction().commit();
session.close();
System.out.println(users.size());
并接收
Hibernate: select userdetali0_.userId as userId1_0_, userdetali0_.userName as userName2_0_ from UserDetalis userdetali0_
0
为什么我得到 0? 为什么新运行后DB就清空了?
三个小时我都无法打败它。 谢谢。
最佳答案
<property name="connection.url">jdbc:h2:mem:db1</property>
上面似乎意味着您使用嵌入式数据库。它不是持久的,当您的应用程序关闭时,它会与您的应用程序一起消失。此类数据库最常用于测试目的。尝试一些持久性的,例如 PostgreSQL 或 MySql。
关于java - Hibernate:记录到数据库后无法获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333784/