JavaEE 5 中,使用EntityManager的find方法时,总是报NullPointerException!!!???

Orient036 2008-01-15 11:07:21
我在使用JavaEE 5 ,NetBean6.0.1多语言版本,GalssFish v2。

例如数据库有一个表User,有两个字段:name、password,再用NetBean生成了一个对应的User实体类,用NetBean为User实体类生成一个SessionBean。

在运行如下代码时总是报NullPointerException:

EntityManager em;
......
em.find(User.class, name);

感觉应该很简单,但不知怎么回事,总是出现这个异常。

请大家帮忙分析一下,非常谢谢!
...全文
809 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
a405144434 2011-12-10
  • 打赏
  • 举报
回复
真心请教楼主是怎么调通的!!!!!!!!我要被这问题折腾疯了
Orient036 2008-01-17
  • 打赏
  • 举报
回复
结贴,谢谢java2000_net、hahe7788,谢谢大家
Orient036 2008-01-17
  • 打赏
  • 举报
回复
我明白了,依赖注入不能在普通类中完成。
Orient036 2008-01-16
  • 打赏
  • 举报
回复
我直接用的JavaEE 5 中的JPA。

今天调通了,不过又遇到一点新问题。

SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。

但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。

我估计是我对什么时候容器调用依赖注入没有搞清楚。
老紫竹 2008-01-16
  • 打赏
  • 举报
回复
EntityManager em;
你用的JPA吗?
把管理类贴上来看看,最前面的10行就行
Orient036 2008-01-16
  • 打赏
  • 举报
回复
我知道User是专用的。我不是用的User,用的Users。
老紫竹 2008-01-16
  • 打赏
  • 举报
回复
@Transactional
是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
hahe7788 2008-01-16
  • 打赏
  • 举报
回复
按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
老紫竹 2008-01-16
  • 打赏
  • 举报
回复
你把表名换一下看看,比如 T_User
Orient036 2008-01-16
  • 打赏
  • 举报
回复
to:java2000_net

还是不行呢?

我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!

真的有点晕了!
Orient036 2008-01-16
  • 打赏
  • 举报
回复
to:java2000_net

我再去试试。

@Transactional // 这个必须加上才行

我看很多教材没有这个语句呢?包括官方的文档。


老紫竹 2008-01-16
  • 打赏
  • 举报
回复
果然少了关键的一句话
@Transactional // 这个必须加上才行
public class UserCRUD {

@PersistenceContext
private EntityManager em;
Orient036 2008-01-16
  • 打赏
  • 举报
回复
我使用的依赖注入。

/////////////////
///实体类
/////////////////
@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.");
}

......
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧