if(specialmarkId!= null){.....}被忽略了

时间:2014-04-24 04:00:41

标签: java sql jpa

我正在使用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) {...}不起作用?

1 个答案:

答案 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");