對於一個項目,我嘗試創建一個類,使用Hibernate從數據庫中獲取數據。Java - 製作對靜態方法的靜態引用
在這個類中,我還嘗試製作一個使用DAO從數據庫中提取數據的對象列表。但是,當我嘗試通過列表循環時,eclipse提醒我,我試圖對非靜態方法進行靜態引用。
我的印象是,如果您使用的是一個非靜態的對象(操作符op)實例,並且它不引用靜態方法,它可以工作。 爲什麼不能這樣工作,我該如何解決它?
讓我特別困惑的是,老師給出的示例代碼做了同樣的事情,但確實有效。
package Client.DAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
public class mainTest {
private static EntityManagerFactory entityManagerFactory;
public static void main(String[] args) {
EntityManager em = null;
try {
entityManagerFactory = HibernateUtil.getEntityManagerFactory();
em = entityManagerFactory.createEntityManager();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
operatorDAO dao = new operatorDAOImpl(em);
List<operator> operators = dao.findAll();
for (operator op : operators) {
System.out.print("Id: " + operator.getID());// <-- This doesnt work
System.out.print(", First Name: " + operator.getName()); // <-- This doesnt work
}
}
}
作爲參考,工作示例代碼。警告:長
package nl.hu.ict;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import nl.hu.ict.dao.HibernateUtil;
import nl.hu.ict.dao.LecturerDao;
import nl.hu.ict.dao.LecturerDaoHibImpl;
import nl.hu.ict.model.Lecturer;
public class MyHibernateTest {
private static EntityManagerFactory entityManagerFactory;
public static void main(String[] args) {
// get the Hibernate - JPA entityManager
EntityManager em = null;
try {
entityManagerFactory = HibernateUtil.getEntityManagerFactory();
em = entityManagerFactory.createEntityManager();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
// get the program (not necessary)
// MyHibernateTest test = new MyHibernateTest();
LecturerDao lectDao = new LecturerDaoHibImpl(em);
Integer id;
// handle the database actions
// list all lecturers
List<Lecturer> lecturers = lectDao.findAll();
for (Lecturer lecturer : lecturers) {
System.out.print("Id: " + lecturer.getID());
System.out.print(", First Name: " + lecturer.getFirstName());
System.out.println(", Last Name: " + lecturer.getLastName());
System.out.println(", Last Name: " + lecturer.getLastName());
}
// add an lecturer
Lecturer lect = new Lecturer();
lect.setFirstName("Bill");
lect.setLastName("Pianoman");
lectDao.persist(lect);
// get the id of the added lecturer
id = lect.getID();
// list to view changes
lecturers = lectDao.findAll();
for (Lecturer lecturer : lecturers) {
System.out.print(lecturer);
}
// change a lecturer
// find find it again
lect = lectDao.findById(id);
// change it
lect.setFirstName("Billy");
lectDao.update(lect);
// list to view changes
lecturers = lectDao.findAll();
for (Lecturer lecturer : lecturers) {
System.out.print(lecturer);
}
// delete a lecturer
// find it again
lect = lectDao.findById(id);
// delete it
lectDao.delete(lect);
// list to view changes
lecturers = lectDao.findAll();
for (Lecturer lecturer : lecturers) {
System.out.print(lecturer);
}
em.close();
System.out.println("-- einde --");
}
}
你能想出更簡單的例子嗎? – Andremoniy
你沒有使用這個對象,你正在使用這個類。 operator.getID()應該是op.getID() –