JSF转换器中的NullPointerException

JSF转换器中的NullPointerException,jsf,ejb,converter,Jsf,Ejb,Converter,我有一个表用户和专门的数据库 用户: CREATE TABLE IF NOT EXISTS `ePrzychodnia`.`users` ( `id` INT NOT NULL AUTO_INCREMENT , `firstName` VARCHAR(45) NOT NULL , `lastName` VARCHAR(45) NOT NULL , `specialization_id` INT NULL , PRIMARY KEY (`id`) , UNIQUE IND

我有一个表用户和专门的数据库

用户:

CREATE  TABLE IF NOT EXISTS `ePrzychodnia`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `firstName` VARCHAR(45) NOT NULL ,
  `lastName` VARCHAR(45) NOT NULL ,
  `specialization_id` INT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `personalId_UNIQUE` (`personalId` ASC) ,
  INDEX `fk_users_specializations1_idx` (`specialization_id` ASC) ,
  CONSTRAINT `fk_users_specializations1`
    FOREIGN KEY (`specialization_id` )
    REFERENCES `ePrzychodnia`.`specializations` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "firstName")
    private String firstName;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "lastName")
    private String lastName;
    @Basic(optional = false)
    @JoinColumn(name = "specialization_id", referencedColumnName = "id")
    @ManyToOne
    private Specialization specializationId;
专业:

CREATE  TABLE IF NOT EXISTS `ePrzychodnia`.`specializations` (
  `id` INT NOT NULL ,
  `name` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `name_UNIQUE` (`name` ASC) )
ENGINE = InnoDB;
实体类:

用户:

CREATE  TABLE IF NOT EXISTS `ePrzychodnia`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `firstName` VARCHAR(45) NOT NULL ,
  `lastName` VARCHAR(45) NOT NULL ,
  `specialization_id` INT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `personalId_UNIQUE` (`personalId` ASC) ,
  INDEX `fk_users_specializations1_idx` (`specialization_id` ASC) ,
  CONSTRAINT `fk_users_specializations1`
    FOREIGN KEY (`specialization_id` )
    REFERENCES `ePrzychodnia`.`specializations` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "firstName")
    private String firstName;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "lastName")
    private String lastName;
    @Basic(optional = false)
    @JoinColumn(name = "specialization_id", referencedColumnName = "id")
    @ManyToOne
    private Specialization specializationId;
专业化:

public class Specialization implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "name")
    private String name;
    @OneToMany(mappedBy = "specializationId")
    private Collection<User> userCollection;
但这是行不通的;/我有一个错误:

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at pl.Project.dao.SpecializationDao.find(SpecializationDao.java:36)
    at pl.Project.converter.SpecializationConverter.getAsObject(SpecializationConverter.java:29)
专业化DAO:

@Stateless
public class SpecializationDao implements SpecializationDaoLocal {

    @PersistenceContext
    private EntityManager em;
    private Specialization specialization;

    public SpecializationDao() {
    }

    public SpecializationDao(Specialization specialization) {
        this.specialization = specialization;
    }

    @Override
    public Specialization find(int specializationId) {
        return em.find(Specialization.class, specializationId);
    }

    @Override
    public List<Specialization> findAllSpecialization() {
        Query q = em.createNamedQuery("Specialization.findAll");
        List<Specialization> specializations = q.getResultList();
        return specializations;
    }
}
@无状态
公共类SpecializationDao实现SpecializationDaoLocal{
@持久上下文
私人实体管理者;
私人专业化;
公共专业化{
}
公共专业化DAO(专业化){
专业化=专业化;
}
@凌驾
公共专门化查找(int specializationId){
返回em.find(Specialization.class,specializationId);
}
@凌驾
公共列表findAllSpecialization(){
Query q=em.createNamedQuery(“Specialization.findAll”);
列表专门化=q.getResultList();
返回专业化;
}
}

读取堆栈跟踪。
specializationDao.find
方法中有一个
null
变量。哪一个可能是?这取决于你和调试器找到它。顺便说一句,添加数据库表、JPA实体和转换器的所有信息与问题无关,这也不是JSF的问题。@Orange91您发布了很多东西,但错过了
SpecializationDao
!!!可能的副本。顺便说一句,这个问题是因为您手动创建EJB而不是注入它,所以不会创建
EntityManager em
,因此
为null
,并为您提供NPE。@Luiggi:无法在
@FacesConverter
中使用
@EJB
,实际上是一个真正的JSF问题。OP只是试图以错误的方式解决它,因此不再是JSF的问题:)@Luiggi:是的,现在他实际上在stacktrace的第1行后面发布了代码,这变得更加清楚了。Orange:现在是学习如何解释stacktraces的时候了,这实际上是基本Java,与JSF无关。