例如数据库有一个表User,有两个字段:name、password,再用NetBean生成了一个对应的User实体类,用NetBean为User实体类生成一个SessionBean。
在运行如下代码时总是报NullPointerException:
EntityManager em;
......
em.find(User.class, name);
感觉应该很简单,但不知怎么回事,总是出现这个异常。
请大家帮忙分析一下,非常谢谢!
13 个解决方案
#1
你把表名换一下看看,比如 T_User
#2
我知道User是专用的。我不是用的User,用的Users。
#3
EntityManager em;
你用的JPA吗?
把管理类贴上来看看,最前面的10行就行
你用的JPA吗?
把管理类贴上来看看,最前面的10行就行
#4
我使用的依赖注入。
/////////////////
///实体类
/////////////////
@Entity
@Table(name = "USERS")
@NamedQueries({@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "PASSWORD", nullable = false)
private String password;
......
public Users(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
////////////////////////////////
////封装对Users实体的操作
////////////////////////////////
public class UserCRUD {
@PersistenceContext
private EntityManager em;
public UserCRUD() {
}
......
//仅仅列出了find方法
public Users find(String id) {
return em.find(base.entities.Users.class, id);
}
......
}
////////////////////////////////////
///用JUnit对UserCRUD类生成的测试类
////////////////////////////////////
public class UserCRUDTest {
public UserCRUDTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
......
//仅仅列出了find方法
/**
* Test of find method, of class UserCRUD.
*/
@Test
public void find() {
System.out.println("find");
String id = "romeo"; //用户名romeo
UserCRUD instance = new UserCRUD();
Users expResult = null;
Users result = instance.find(id);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
......
}
/////////////////
///实体类
/////////////////
@Entity
@Table(name = "USERS")
@NamedQueries({@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "PASSWORD", nullable = false)
private String password;
......
public Users(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
////////////////////////////////
////封装对Users实体的操作
////////////////////////////////
public class UserCRUD {
@PersistenceContext
private EntityManager em;
public UserCRUD() {
}
......
//仅仅列出了find方法
public Users find(String id) {
return em.find(base.entities.Users.class, id);
}
......
}
////////////////////////////////////
///用JUnit对UserCRUD类生成的测试类
////////////////////////////////////
public class UserCRUDTest {
public UserCRUDTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
......
//仅仅列出了find方法
/**
* Test of find method, of class UserCRUD.
*/
@Test
public void find() {
System.out.println("find");
String id = "romeo"; //用户名romeo
UserCRUD instance = new UserCRUD();
Users expResult = null;
Users result = instance.find(id);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
......
}
#5
果然少了关键的一句话
@Transactional // 这个必须加上才行
public class UserCRUD {
@PersistenceContext
private EntityManager em;
#6
to:java2000_net
我再去试试。
@Transactional // 这个必须加上才行
我看很多教材没有这个语句呢?包括官方的文档。
我再去试试。
@Transactional // 这个必须加上才行
我看很多教材没有这个语句呢?包括官方的文档。
#7
to:java2000_net
还是不行呢?
我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!
真的有点晕了!
还是不行呢?
我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!
真的有点晕了!
#8
按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
#9
@Transactional
是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
#10
我直接用的JavaEE 5 中的JPA。
今天调通了,不过又遇到一点新问题。
SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。
但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。
我估计是我对什么时候容器调用依赖注入没有搞清楚。
今天调通了,不过又遇到一点新问题。
SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。
但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。
我估计是我对什么时候容器调用依赖注入没有搞清楚。
#11
我明白了,依赖注入不能在普通类中完成。
#12
结贴,谢谢java2000_net、hahe7788,谢谢大家
#13
真心请教楼主是怎么调通的!!!!!!!!我要被这问题折腾疯了
#1
你把表名换一下看看,比如 T_User
#2
我知道User是专用的。我不是用的User,用的Users。
#3
EntityManager em;
你用的JPA吗?
把管理类贴上来看看,最前面的10行就行
你用的JPA吗?
把管理类贴上来看看,最前面的10行就行
#4
我使用的依赖注入。
/////////////////
///实体类
/////////////////
@Entity
@Table(name = "USERS")
@NamedQueries({@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "PASSWORD", nullable = false)
private String password;
......
public Users(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
////////////////////////////////
////封装对Users实体的操作
////////////////////////////////
public class UserCRUD {
@PersistenceContext
private EntityManager em;
public UserCRUD() {
}
......
//仅仅列出了find方法
public Users find(String id) {
return em.find(base.entities.Users.class, id);
}
......
}
////////////////////////////////////
///用JUnit对UserCRUD类生成的测试类
////////////////////////////////////
public class UserCRUDTest {
public UserCRUDTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
......
//仅仅列出了find方法
/**
* Test of find method, of class UserCRUD.
*/
@Test
public void find() {
System.out.println("find");
String id = "romeo"; //用户名romeo
UserCRUD instance = new UserCRUD();
Users expResult = null;
Users result = instance.find(id);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
......
}
/////////////////
///实体类
/////////////////
@Entity
@Table(name = "USERS")
@NamedQueries({@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "PASSWORD", nullable = false)
private String password;
......
public Users(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
////////////////////////////////
////封装对Users实体的操作
////////////////////////////////
public class UserCRUD {
@PersistenceContext
private EntityManager em;
public UserCRUD() {
}
......
//仅仅列出了find方法
public Users find(String id) {
return em.find(base.entities.Users.class, id);
}
......
}
////////////////////////////////////
///用JUnit对UserCRUD类生成的测试类
////////////////////////////////////
public class UserCRUDTest {
public UserCRUDTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
......
//仅仅列出了find方法
/**
* Test of find method, of class UserCRUD.
*/
@Test
public void find() {
System.out.println("find");
String id = "romeo"; //用户名romeo
UserCRUD instance = new UserCRUD();
Users expResult = null;
Users result = instance.find(id);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
......
}
#5
果然少了关键的一句话
@Transactional // 这个必须加上才行
public class UserCRUD {
@PersistenceContext
private EntityManager em;
#6
to:java2000_net
我再去试试。
@Transactional // 这个必须加上才行
我看很多教材没有这个语句呢?包括官方的文档。
我再去试试。
@Transactional // 这个必须加上才行
我看很多教材没有这个语句呢?包括官方的文档。
#7
to:java2000_net
还是不行呢?
我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!
真的有点晕了!
还是不行呢?
我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!
真的有点晕了!
#8
按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
#9
@Transactional
是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
#10
我直接用的JavaEE 5 中的JPA。
今天调通了,不过又遇到一点新问题。
SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。
但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。
我估计是我对什么时候容器调用依赖注入没有搞清楚。
今天调通了,不过又遇到一点新问题。
SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。
但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。
我估计是我对什么时候容器调用依赖注入没有搞清楚。
#11
我明白了,依赖注入不能在普通类中完成。
#12
结贴,谢谢java2000_net、hahe7788,谢谢大家
#13
真心请教楼主是怎么调通的!!!!!!!!我要被这问题折腾疯了