Java JPA属性访问提供NullPointerException
我的数据库中有一个名为Products的表,我正在使用JPA2.0来访问它 我正在Glassfish服务器上使用JSF2.0 我的图层如下所示: products.xhtml->ProductsBackingBean.java->ProductsDao.java->Produtcs.java 下面是products.xhtml:Java JPA属性访问提供NullPointerException,java,jpa,Java,Jpa,我的数据库中有一个名为Products的表,我正在使用JPA2.0来访问它 我正在Glassfish服务器上使用JSF2.0 我的图层如下所示: products.xhtml->ProductsBackingBean.java->ProductsDao.java->Produtcs.java 下面是products.xhtml: <h:form> <p:dataTable var="product" value="#{productsBackingBean.allPro
<h:form>
<p:dataTable var="product" value="#{productsBackingBean.allProducts}">
<p:column headerText="Product Code">
<h:outputText value="#{product.productCode}"/>
</p:column>
<p:column headerText="Product Description">
<h:outputText value="#{product.productDescription}"/>
</p:column>
</p:dataTable>
</h:form>
因此,重要的部分是:
返回productDescription.substring(0,20)强>
在我的表格中,我只想显示产品描述的前20个字符。但我有一个例外:
异常
javax.servlet.ServletException
根本原因
javax.ejb.NoSuchEJBException
根本原因
javax.ejb.NoSuchObjectLocalException:ejb不存在。会话密钥:3890c00100a81f-3a922970-0
我必须注意,当我在ProductDao的init()方法中找到一个断点时,我看到它被调用了。但是,当ProductBackingBean调用productDao.getAllProducts时,productDao似乎为空
在日志中,我还看到:
在com.tugay.maythero.model.EJB31\u生成的产品dao\u Intf\uBean\uu.getAllProducts(未知来源)
在com.tugay.maythero.model.ProductsBackingBean.getAllProducts(ProductsBackingBean.java:14)
如果删除子字符串(0,20),则一切正常。
我有两个问题:
正确的方法是在ui层削减您的价值。实体字段可能在完全初始化之前被访问,这会导致您尝试修剪空值。正确的方法是在ui层修剪您的值。实体字段可能在完全初始化之前被访问,这会导致您尝试修剪空值。数据库中可能有
null
productDescription
,因此有必要在子字符串
之前检查null
值,如下示例:
@javax.persistence.Column(name = "productDescription")
@Basic
public String getProductDescription() {
return productDescription !=null ? productDescription.substring(0,20) : "";
}
但是我建议您保持getProductDescription()
的完整性,并创建一个新的来返回简短的描述,它将是:
@javax.persistence.Column(name = "productDescription")
@Basic
public String getProductDescription() {
return productDescription;
}
public String getShortDescription() {
return productDescription !=null ? productDescription.substring(0,20) : "";
}
数据库中可能有
null
productDescription
,因此有必要在substring
之前检查null
值,如下例:
@javax.persistence.Column(name = "productDescription")
@Basic
public String getProductDescription() {
return productDescription !=null ? productDescription.substring(0,20) : "";
}
但是我建议您保持getProductDescription()
的完整性,并创建一个新的来返回简短的描述,它将是:
@javax.persistence.Column(name = "productDescription")
@Basic
public String getProductDescription() {
return productDescription;
}
public String getShortDescription() {
return productDescription !=null ? productDescription.substring(0,20) : "";
}
似乎数据库中的“productDescription”值为null。在执行子字符串之前,请先执行nullcheck@Nambari如果我删除子字符串(0,20),一切都很好。是的,如果对空引用执行任何操作,就会发生NPE。所以,我猜您得到的productdescription为空。@Nambari感谢您的评论。但是为什么呢?是因为它试图在从数据库获取数据之前应用该方法吗?有趣的..@KorayTugay刚刚发布了一个包含更多信息的答案。似乎您在数据库中的“productDescription”值为null。在执行子字符串之前,请先执行nullcheck@Nambari如果我删除子字符串(0,20),一切都很好。是的,如果对空引用执行任何操作,就会发生NPE。所以,我猜您得到的productdescription为空。@Nambari感谢您的评论。但是为什么呢?是因为它试图在从数据库获取数据之前应用该方法吗?有趣..@KorayTugay刚刚发布了一个包含更多信息的答案。我认为bean有问题,而不是值本身。可能是吗?我认为bean有问题,而不是值本身。会吗?
@javax.persistence.Column(name = "productDescription")
@Basic
public String getProductDescription() {
return productDescription;
}
public String getShortDescription() {
return productDescription !=null ? productDescription.substring(0,20) : "";
}