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无关。