java - "non static method cannot be referenced from a static context"JPA Java

标签 java jpa

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

createStudent("stu00001", new Date(631152000000)), "m", "WB", new Type_Name("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指出,仅此更改就在访问变量 ememf 时给他带来了另一个错误。要解决这个问题,您还需要将这些变量设为静态:

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;
    }
}

关于java - "non static method cannot be referenced from a static context"JPA Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979278/

相关文章:

java - QueryDSL,其中关系可能为空

JAVA_HOME 未正确定义编译时出错

java - Android Studio : How do I get wrap_content + value?

java - 将请求和响应从 jsp 发送到 servlet

java - JPA空对象

java - 如何在hibernate中映射java属性

java - 如何向 Android 应用添加新页面?

java - 为什么在发送之前将 String 转换为字节数组?

java - 如何在 Hibernate 中将子类映射到父类?

java - 是否可以将 JPA 连接池与 Google App Engine 和 Cloud SQL 一起使用?