>使用 放心,想管理我的实体经理。在 WEB-INF 中具有持久性.xml资源和 bean.xml。想要在以下情况下使用实体管理器:
public class EntityDao {
// @PersistenceContext(unitName = "UserPersistenceUnit")
@Inject
private EntityManager entityManager;
public void add(Object t) {
try {
System.out.println("start adding4.");
if (entityManager == null) {
System.out.println("entity manager is null.");
entityManager = Persistence.
createEntityManagerFactory("UserPersistenceUnit").
createEntityManager();
if (entityManager != null) {
System.out.println("entity manager created.");
}
}
// entityManager.getTransaction().begin();
// entityManager.persist(t);
// entityManager.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
我的制片人是:
@ApplicationScoped
public class Resources {
// @PersistenceContext
// @Produces
// private EntityManager entityManager;
@Produces
public EntityManager getEntityManager() {
System.out.println("get enrity manager.");
EntityManager entityManager = Persistence.
createEntityManagerFactory("UserPersistenceUnit").
createEntityManager();
return entityManager;
}
}
但我的实体管理器为空。有人可以帮忙吗?
我的休息代码是:
@Path("/userreg")
public class UserRegistration {
User user;
@GET
@Produces({"application/json", "application/xml"})
public User UserRegister() {
UserDao userDao = new UserDao();
user = new User();
user.setUserName("u1");
user.setPassword("p1");
userDao.add(user);
return user;
}
}
而用户道是:
public class UserDao extends EntityDao{
}
我的诗是:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
</dependencies>
在实体道中,我的实体管理器具有@Inject为空,生产者不起作用。感谢。
你的错误在这里
UserDao userDao = new UserDao();
如果您自己使用new
实例化类,则它不会由 CDI 管理,因此@Inject
将被忽略,您的字段将为空。
所以正确的代码是:
@Path("/userreg")
public class UserRegistration {
User user;
@Inject
UserDao userDao;
@GET
@Produces({"application/json", "application/xml"})
public User UserRegister() {
user = new User();
user.setUserName("u1");
user.setPassword("p1");
userDao.add(user);
return user;
}
}
除此之外,还有一点关于你的代码的反馈:
检查
Resources
中的@Produces
是否为javax.enterprise.inject.Produces
而不是javax.ws.rs.Produces
,如果你不检查导入,你的IDE可能会给你一个糟糕的把戏部分我建议您取消注释代码的
@PersistenceContext
部分。避免在Java EE应用程序中手动生成它:您将失去Java EE的许多开箱即用的功能。您不应该添加包含在 peoject 中的休眠依赖项,因为它是由 WildFly 提供的。