我正在嘗試學習JPA。如果我寫一個,然後在關閉之前立即閱讀,它就會起作用。但是,如果我嘗試自己閱讀,它不會。這裏是我的用戶代碼:JPA的新手 - 可以編寫,但無法從數據庫讀取
@Entity
@Table(name = "JPA_Users")
public class User {
@Id @GeneratedValue
@Column(name = "user_id")
private int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
public User(){}
public User(String username, String password){
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString(){
return Integer.toString(id) + ":" + username + ":" + password;
}
}
這裏是JPA代碼:
public void write(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("helloworld");
EntityManager em = emf.createEntityManager();
EntityTransaction et = em.getTransaction();
et.begin();
User user = new User("Chris", "123456");
User user2 = new User("Dave", "password");
User user3 = new User("Peter", "asfdfsdf");
em.persist(user);
em.persist(user2);
em.persist(user3);
em.flush();
List users = em.createQuery("SELECT u FROM User u").getResultList();
System.out.println(users.size() + " user(s) found");
for(Object o : users){
User u = (User) o;
System.out.println(u.getId());
System.out.println(u.getUsername());
System.out.println(u.getPassword());
System.out.println("--------------------------");
}
et.commit();
em.close();
emf.close();
}
上述工作,並打印出用戶的詳細信息。但如果我自己運行下面的方法,它不起作用。它打印出「找到0個用戶」。我已經在SQL Developer中檢查過,看看這個表是否在那裏並且已經填充了,它是。
public void read(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("helloworld");
EntityManager em = emf.createEntityManager();
List users = em.createQuery("SELECT u FROM User u").getResultList();
System.out.println(users.size() + " user(s) found");
for(Object o : users){
User u = (User) o;
System.out.println(u.getId());
System.out.println(u.getUsername());
System.out.println(u.getPassword());
System.out.println("--------------------------");
}
em.close();
emf.close();
}
這在它自己也不起作用:
public void read(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("helloworld");
EntityManager em = emf.createEntityManager();
User u = em.find(User.class, 1);
System.out.println(u);
em.close();
emf.close();
}
最後,這裏是persistence.xml中。我不瞭解下面的大部分內容,所以我想這個問題與這裏的內容有關。謝謝,我感謝任何幫助。
<persistence 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"
version="1.0">
<persistence-unit name="helloworld">
<properties>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm" />
<!-- SQL stdout logging -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="use_sql_comments" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.url"
value="jdbc:My_Database_location" />
<property name="hibernate.connection.username" value="My_Username" />
<property name="hibernate.connection.password" value="My_Password"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.c3p0.min_size" value="2" />
<property name="hibernate.c3p0.max_size" value="30" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
</properties>
</persistence-unit>
是的,正確的。我有用戶ID 1,2和3. 另外:如果我再次運行寫入方法,它不會再添加三行。我還剩三個。 – Chris
這很奇怪,因爲如果你再次堅持操作,它應該添加新用戶。你確定你正在檢查你在你的休眠cfg中的數據庫嗎? – Antoniossss
是的,數據庫是一樣的。我只能在工作中訪問這個數據庫。 我正在使用的Persistence.xml被複制並粘貼,唯一改變的是數據庫地址,用戶名和密碼。 – Chris