我正在使用JSF2和Pure JPA2.但问题出在entityManager上,
@PersistenceContext
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
这里entityManager没有被注入并且总是为null.有人可以帮我解决我的代码中出了什么问题.
这是我的配置.
User.java
@Entity
@Table(name="USER")
public class User {
private int id;
private String name;
private String surname;
@Id
@SequenceGenerator(name="user_id_seq_gen", sequenceName="USER_ID_GEN_SEQ", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="user_id_seq_gen")
@Column(name="ID", unique = true, nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="NAME", unique = true, nullable = false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="SURNAME", unique = true, nullable = false)
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
Run Code Online (Sandbox Code Playgroud)
persistence.xml中
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com /xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="testUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/comp/env/testDS</non-jta-data-source>
<class>com.user.external.test.User</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.max_fetch_depth" value="6"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
Tomcat Server.xml
<Context docBase="usertools" path="/usertools" reloadable="true">
<ResourceLink name="testDS"
global="testDS"
type="javax.sql.DataSource"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
TestBean.java
@ManagedBean(name="testBean")
@ViewScoped
public class TestBean implements Serializable{
@ManagedProperty("#{testService}")
private ITestService testService;
public void saveData(User user){
testService.saveUser(user);
}
public void setTestService(ITestService testService){
this.testService = testService;
}
public ITestService getTestService(){
return testService;
}
}
Run Code Online (Sandbox Code Playgroud)
TestServiceImpl.java
@ManagedBean(name="testService")
@ApplicationScoped
public class TestServiceImpl implements ITestService {
@ManagedProperty(value="#{testDAO}")
private ITestDAO testDAO;
public void saveUser(User user){
testDAO.saveUser(user);
}
public void setTestDAO(ITestDAO testDAO){
this.testDAO = testDAO;
}
public ITestDAO getTestDAO(){
return testDAO;
}
}
Run Code Online (Sandbox Code Playgroud)
TestDao.java
@ManagedBean(name = "testDAO")
@ApplicationScoped
public class TestDAO implements ITestDAO {
@PersistenceContext
private EntityManager entityManager; // is null
public void saveUser(User user){
entityManager.persist(user); // Getting Null Pointer Here....
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public EntityManager getEntityManager() {
return entityManager;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过@PersistenceContext name和unitName属性.但它仍然无法正常工作.还尝试使用web.xml中的resource config
<persistence-context-ref>
<persistence-context-ref-name>testUnit</persistence-context-ref-name>
<persistence-unit-name>testUnit</persistence-unit-name>
</persistence-context-ref>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>testUnit</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
仍然没有运气.有人可以帮帮我吗.
Bal*_*usC 12
Tomcat不是Java EE容器,因此存在与容器管理工厂和依赖注入相关的限制.其中,您需要手动创建EntityManagerFactory和EntityManager.
Hibernate文档不清楚,所以这里是Eclipselink:Tomcat/JPA教程.检查"对JPA的限制"部分,这适用于Hibernate.
| 归档时间: |
|
| 查看次数: |
14749 次 |
| 最近记录: |