&引用;无法从静态上下文引用非静态方法;JPA Java

&引用;无法从静态上下文引用非静态方法;JPA Java,java,jpa,Java,Jpa,我从这一行得到“非静态方法无法从静态上下文引用”错误: createStudent(“stu00001”,新日期(631152000000)),“m”,“WB”,新类型名称(“Bob”,“Smith”) 如何正确地填写“日期”?我看了一下API,尝试了不同的方法,但仍然得到一个日期错误 package grade_db; import bean.Student; import bean.Type_Name; import bean.University; import java.util.Da

我从这一行得到“非静态方法无法从静态上下文引用”错误:

createStudent(“stu00001”,新日期(631152000000)),“m”,“WB”,新类型名称(“Bob”,“Smith”)

如何正确地填写“日期”?我看了一下API,尝试了不同的方法,但仍然得到一个日期错误

package grade_db;

import bean.Student;
import bean.Type_Name;
import bean.University;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
 *
 * @author Sam
 */

public class Main {

EntityManager em;
EntityManagerFactory emf;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("db/grades.odb");

        EntityManager em;
        em = emf.createEntityManager();

        createStudent("stu00001", new Date(631152000000)), "m", "WB", new Type_Name("Bob", "", "Smith"));

        em.close();
        emf.close();
    }


    public Student createStudent(String student_id, Date dob, String gender, String nationality, Type_Name name){
    Student stu = new Student();
    stu.setDob(dob);
    stu.setGender(gender);
        stu.setName(name);
    stu.setNationality(nationality);

        stu.setCampus_id("cam00001");
        stu.setCourse_id(null);
        stu.setStudent_id(student_id);

    em.persist(stu);
    return stu;
}
}

问题是您试图从
main()
中的静态上下文调用实例方法
createStudent()
。如果您将
createStudent()
方法更改为静态,您应该可以:

public static Student createStudent(String student_id, Date dob, String gender, String nationality, Type_Name name) {
    // ... And so on 
}
编辑:OP指出,在访问变量
em
emf
时,仅此更改就给了他另一个错误。要解决这个问题,您还需要将这些变量设置为静态的:

static EntityManager em;
static EntityManagerFactory emf;
在这一点上,您的类中的所有内容都是静态的。假设这是一个简单的一次性或示例——我很乐意这样假设,因为这个类被称为
Main
——使一切都是静态的就好了。总之,代码如下所示:

package grade_db;

import bean.Student;
import bean.Type_Name;
import bean.University;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
 *
 * @author Sam
 */

public class Main {

    static EntityManager em;
    static EntityManagerFactory emf;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("db/grades.odb");

        EntityManager em;
        em = emf.createEntityManager();

        createStudent("stu00001", new Date(631152000000)), "m", "WB", new Type_Name("Bob", "", "Smith"));

        em.close();
        emf.close();
    }

    public static Student createStudent(String student_id, Date dob, String gender, String nationality, Type_Name name){
        Student stu = new Student();
        stu.setDob(dob);
        stu.setGender(gender);
        stu.setName(name);
        stu.setNationality(nationality);

        stu.setCampus_id("cam00001");
        stu.setCourse_id(null);
        stu.setStudent_id(student_id);

        em.persist(stu);
        return stu;
    }
}

这是因为CreateStudent是对象的成员方法。 Main是静态的,不是对象的一部分

您需要创建一个新的主对象,或使student成为静态对象,才能使其工作

如果将CreateStustudent设置为静态,它将工作

public static Student createStudent(String student_id, Date dob, String gender, String nationality, Type_Name name)
制定方法

       public static Student createStudent(String student_id, Date dob, String gender, String nationality, Type_Name name){
Student stu = new Student();

静态

谢谢!但当我这样做时,我得到了与“em.persist(stu);”相同的“非静态方法”错误,并更新了响应。简短回答:变量也需要是静态的。这很有效,谢谢。你对调用方法“createStudent”有什么建议吗?我不断收到诸如“插入”和日期格式错误之类的错误。它应该是createStudent(String、Date、String、String、Type_Name)(TypeName只是三个字符串,分别代表first、middle和last Name)