我正在使用Java 1.8自动生成的JPAController
Netbeans 8。
public void create(Physical physical) {
if (physical.getTalentCollection() == null) {
physical.setTalentCollection(new ArrayList<Talent>());
}
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
Specialmark specialmarkId = physical.getSpecialmarkId();
System.out.println(specialmarkId+ "...nullValue");
if (specialmarkId != null) {
System.out.println(specialmarkId+ "...ain't right");
specialmarkId = em.getReference(specialmarkId.getClass(), specialmarkId.getId());
physical.setSpecialmarkId(specialmarkId);
}
.....
}
在物理对象创建期间,Specialmark
(物理对象的一部分)是可选的。
它可以有一个值或为null。
表物理中的 Specialmark
允许您具有空值。
当Specialmark
为空时,应跳过if (specialmarkId != null) {...}
。相反,它被忽略并继续。
错误消息是
"... An instance of a null PK has been incorrectly provided for this find operation.
at db.jpa.PhysicalJpaController.create(PhysicalJpaController.java:57)"
System.out.println(specialmarkId+ "...nullValue");
output "null...nullValue" it shows specialmarkId value is null
System.out.println(specialmarkId+ "...ain't right");
输出"null...ain't right"
显示if (specialmarkId != null) {...}
已被忽略,即使specialmarkId
为空。
为什么(specialmarkId != null) {...}
不起作用?
答案 0 :(得分:2)
我猜specialmarkId
并非真的为空,但specialmarkId.toString()
会被覆盖,以便返回字符串"null"
。
而不是
System.out.println(specialmarkId+ "...nullValue");
尝试类似
的内容System.out.println((specialmarkId != null?
specialmarkId.toString() + "(not null)": "(this IS REALLY NULL)")
+ "...nullValue");