Hibernate EntityManager findById:javax.ejb.EJBException:java.lang.NullPointerException

Hibernate EntityManager findById:javax.ejb.EJBException:java.lang.NullPointerException,java,hibernate,jboss,dao,Java,Hibernate,Jboss,Dao,我将Hibernate与Dao和JBoss Wildfly一起使用 java public interface Dao<T> { public List<T> findAll(); public T findById(final Class<T> clazz, final Long id); } 这是我的电话: public class VeranstaltungBO { private Dao<Veranstaltung&g

我将Hibernate与Dao和JBoss Wildfly一起使用

java

public interface Dao<T> {

   public List<T> findAll();

   public T findById(final Class<T> clazz, final Long id);
}
这是我的电话:

public class VeranstaltungBO {

    private Dao<Veranstaltung> veranstaltungDao;

    public Veranstaltung getVeranstaltungById(long id){
       // Line below is number 20
       return veranstaltungDao.findById(Veranstaltung.class, id);
    }
}

请告诉我您也需要什么代码来帮助

出于某种原因,
veranstaltungDao
字段未被注入。使用适当的注释(
@Autowired
在春天,
@Inject
在CDI中,
@EJB
在EJB中-我几乎可以肯定它是EJB)来注入它。例如:

import javax.ejb.EJB;

public class VeranstaltungBO {

    @EJB
    private Dao<Veranstaltung> veranstaltungDao;

    public Veranstaltung getVeranstaltungById(long id){
       // Line below is number 20
       return veranstaltungDao.findById(Veranstaltung.class, id);
    }
}
导入javax.ejb.ejb;
公共类VeranstaltungBO{
@EJB
私家道-维拉斯塔尔通道;
公共Veranstaltung getVeranstaltungById(长id){
//下面一行是20号

返回veranstaltungDao.findById(Veranstaltung.class,id); } }
VeranstaltungDao.java

@Named(value = "veranstaltungDao")
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

    @Override
    public List<Veranstaltung> findAll() {
        final TypedQuery<Veranstaltung> query = getEm().createQuery(
                "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                Veranstaltung.class);

        return query.getResultList();
    }

}
@Stateless
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

        @Override
        public List<Veranstaltung> findAll() {
            final TypedQuery<Veranstaltung> query = getEm().createQuery(
                    "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                    Veranstaltung.class);

            return query.getResultList();
        }

    }
@无状态
公共类VeranstaltungDao扩展了AbstractDao{
@凌驾
公共列表findAll(){
final TypedQuery query=getEm().createQuery(
“从“+Veranstaltung.class.getSimpleName()+”a”中选择a”,
Veranstaltung.class);
返回query.getResultList();
}
}
注意,您需要(在上面的示例中)定义类型为
Dao
的ejbbean。我不确定,但可能您需要特殊的接口
VeranstaltungDao
扩展
Dao
,以使其正常工作

您可以使用对:
@Stateless
-
@EJB
@Named
-
@Inject
。如果您没有激活CDI,第二对将不起作用,如果您没有
beans.xml
文件,可能会发生这种情况


@Stateless
表示您希望给定类的对象作为EJB bean由服务器管理
@EJB
允许将现有bean注入给定的属性。

由于某种原因,
veranstaltungDao
字段未被注入。使用适当的注释(
@Autowired
在春天,
@Inject
在CDI中,
@EJB
在EJB中-我几乎可以肯定它是EJB)来注入它。例如:

import javax.ejb.EJB;

public class VeranstaltungBO {

    @EJB
    private Dao<Veranstaltung> veranstaltungDao;

    public Veranstaltung getVeranstaltungById(long id){
       // Line below is number 20
       return veranstaltungDao.findById(Veranstaltung.class, id);
    }
}
导入javax.ejb.ejb;
公共类VeranstaltungBO{
@EJB
私家道-维拉斯塔尔通道;
公共Veranstaltung getVeranstaltungById(长id){
//下面一行是20号

返回veranstaltungDao.findById(Veranstaltung.class,id); } }
VeranstaltungDao.java

@Named(value = "veranstaltungDao")
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

    @Override
    public List<Veranstaltung> findAll() {
        final TypedQuery<Veranstaltung> query = getEm().createQuery(
                "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                Veranstaltung.class);

        return query.getResultList();
    }

}
@Stateless
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

        @Override
        public List<Veranstaltung> findAll() {
            final TypedQuery<Veranstaltung> query = getEm().createQuery(
                    "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                    Veranstaltung.class);

            return query.getResultList();
        }

    }
@无状态
公共类VeranstaltungDao扩展了AbstractDao{
@凌驾
公共列表findAll(){
final TypedQuery query=getEm().createQuery(
“从“+Veranstaltung.class.getSimpleName()+”a”中选择a”,
Veranstaltung.class);
返回query.getResultList();
}
}
注意,您需要(在上面的示例中)定义类型为
Dao
的ejbbean。我不确定,但可能您需要特殊的接口
VeranstaltungDao
扩展
Dao
,以使其正常工作

您可以使用对:
@Stateless
-
@EJB
@Named
-
@Inject
。如果您没有激活CDI,第二对将不起作用,如果您没有
beans.xml
文件,可能会发生这种情况


@Stateless
表示您希望给定类的对象作为EJB bean由服务器管理
@EJB
允许将现有bean注入给定的属性。

由于某种原因,
veranstaltungDao
字段未被注入。使用适当的注释(
@Autowired
在春天,
@Inject
在CDI中,
@EJB
在EJB中-我几乎可以肯定它是EJB)来注入它。例如:

import javax.ejb.EJB;

public class VeranstaltungBO {

    @EJB
    private Dao<Veranstaltung> veranstaltungDao;

    public Veranstaltung getVeranstaltungById(long id){
       // Line below is number 20
       return veranstaltungDao.findById(Veranstaltung.class, id);
    }
}
导入javax.ejb.ejb;
公共类VeranstaltungBO{
@EJB
私家道-维拉斯塔尔通道;
公共Veranstaltung getVeranstaltungById(长id){
//下面一行是20号

返回veranstaltungDao.findById(Veranstaltung.class,id); } }
VeranstaltungDao.java

@Named(value = "veranstaltungDao")
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

    @Override
    public List<Veranstaltung> findAll() {
        final TypedQuery<Veranstaltung> query = getEm().createQuery(
                "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                Veranstaltung.class);

        return query.getResultList();
    }

}
@Stateless
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

        @Override
        public List<Veranstaltung> findAll() {
            final TypedQuery<Veranstaltung> query = getEm().createQuery(
                    "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                    Veranstaltung.class);

            return query.getResultList();
        }

    }
@无状态
公共类VeranstaltungDao扩展了AbstractDao{
@凌驾
公共列表findAll(){
final TypedQuery query=getEm().createQuery(
“从“+Veranstaltung.class.getSimpleName()+”a”中选择a”,
Veranstaltung.class);
返回query.getResultList();
}
}
注意,您需要(在上面的示例中)定义类型为
Dao
的ejbbean。我不确定,但可能您需要特殊的接口
VeranstaltungDao
扩展
Dao
,以使其正常工作

您可以使用对:
@Stateless
-
@EJB
@Named
-
@Inject
。如果您没有激活CDI,第二对将不起作用,如果您没有
beans.xml
文件,可能会发生这种情况


@Stateless
表示您希望给定类的对象作为EJB bean由服务器管理
@EJB
允许将现有bean注入给定的属性。

由于某种原因,
veranstaltungDao
字段未被注入。使用适当的注释(
@Autowired
在春天,
@Inject
在CDI中,
@EJB
在EJB中-我几乎可以肯定它是EJB)来注入它。例如:

import javax.ejb.EJB;

public class VeranstaltungBO {

    @EJB
    private Dao<Veranstaltung> veranstaltungDao;

    public Veranstaltung getVeranstaltungById(long id){
       // Line below is number 20
       return veranstaltungDao.findById(Veranstaltung.class, id);
    }
}
导入javax.ejb.ejb;
公共类VeranstaltungBO{
@EJB
私家道-维拉斯塔尔通道;
公共Veranstaltung getVeranstaltungById(长id){
//下面一行是20号

返回veranstaltungDao.findById(Veranstaltung.class,id); } }
VeranstaltungDao.java

@Named(value = "veranstaltungDao")
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

    @Override
    public List<Veranstaltung> findAll() {
        final TypedQuery<Veranstaltung> query = getEm().createQuery(
                "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                Veranstaltung.class);

        return query.getResultList();
    }

}
@Stateless
public class VeranstaltungDao extends AbstractDao<Veranstaltung> {

        @Override
        public List<Veranstaltung> findAll() {
            final TypedQuery<Veranstaltung> query = getEm().createQuery(
                    "Select a FROM" + Veranstaltung.class.getSimpleName() +" a",
                    Veranstaltung.class);

            return query.getResultList();
        }

    }
@无状态
公共类VeranstaltungDao扩展了AbstractDao{
@凌驾
公共列表findAll(){
final TypedQuery query=getEm().createQuery(
“从“+Veranstaltung.class.getSimpleName()+”a”中选择a”,
Veranstaltung.class);
返回query.getResultList();
}
}
注意,您需要(在上面的示例中)定义类型为
Dao
的ejbbean。我不确定,但也许您需要特殊的接口
VeranstaltungDao
扩展
Dao
,才能实现它