使用 SingularAttribute 中的 getName() 函数时出现 NullPointerException
NullPointerException when using getName() function from a SingularAttribute
当我调用 SingularAttribute class 的 getName 方法时,我得到一个空指针异常。我已经被困在这里几个小时了,对于我的一生,我无法弄清楚为什么会这样,所以我决定就这个问题征求你们的一些想法。我假设某处我的注释不正确,或者我在创建自动生成的源文件时遗漏了一个步骤。
这是我正在拨打的电话的一个例子:
SingularAttribute attribute = criteria.getAttribute();
if( attribute == null )
System.out.println("Attribute is null");
else
System.out.println(attribute.getName());
这是异常,它发生在 attribute.getName() 调用中:
Exception in thread "main" java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.metamodel.proxy.AttributeProxyImpl.getName(AttributeProxyImpl.java:73)
at test.core.Test.main(Main.java:47)
我有自动生成的源文件,其中包含我的实体的元模型数据,这是我的实体和我的元模型的示例:
@Entity
@Table(name = "cards")
public class Card {
@Column(unique = true)
private String name;
}
@Generated(value="EclipseLink-2.6.0.v20140809-rNA", date="2015-01-07T09:16:03")
@StaticMetamodel(Card.class)
public class Card_ {
public static volatile SingularAttribute<Card, String> name;
}
这是我的标准class:
public class Criteria<T,U extends Serializable> {
private final SingularAttribute<? super T, U> attribute;
private final U parameter;
private final CriteriaOperator operator;
Criteria(SingularAttribute<? super T, U> attribute, U parameter, CriteriaOperator operator) {
this.attribute = attribute;
this.parameter = parameter;
this.operator = operator;
}
public static enum CriteriaOperator{
AND,OR,NOT;
}
public SingularAttribute<? super T, U> getAttribute() {
return attribute;
}
public U getParameter() {
return parameter;
}
public CriteriaOperator getOperator() {
return operator;
}
}
我在此处创建条件的新实例 class
33 public static void main(String[] args) {
34
35 Criteria<Card, String> criteria = new Criteria<Card, String>(Card_.name, "test", CriteriaOperator.AND);
36
37 if (criteria == null) {
38 System.out.println("Criteria is null");
39 } else {
40 System.out.println(criteria.getOperator().name());
41
42 SingularAttribute<? super Card, String> attribute = criteria.getAttribute();
43 if( attribute == null )
45 System.out.println("Attribute is null");
46 else
47 System.out.println(attribute.getName());
48
49 System.out.println(criteria.getParameter().toString());
50 }
51
52 }
编辑 1:删除了 gui 组件以使示例更加简单,包括实例化条件 class.
的主要函数
显然需要打开与我的数据库的连接才能使 attribute.getName() 调用成功。一旦我创建了 EntityManagerFactory 和 EntityManager 的实例,调用就会起作用。一旦删除这两行,调用就会失败。
当我调用 SingularAttribute class 的 getName 方法时,我得到一个空指针异常。我已经被困在这里几个小时了,对于我的一生,我无法弄清楚为什么会这样,所以我决定就这个问题征求你们的一些想法。我假设某处我的注释不正确,或者我在创建自动生成的源文件时遗漏了一个步骤。
这是我正在拨打的电话的一个例子:
SingularAttribute attribute = criteria.getAttribute();
if( attribute == null )
System.out.println("Attribute is null");
else
System.out.println(attribute.getName());
这是异常,它发生在 attribute.getName() 调用中:
Exception in thread "main" java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.metamodel.proxy.AttributeProxyImpl.getName(AttributeProxyImpl.java:73)
at test.core.Test.main(Main.java:47)
我有自动生成的源文件,其中包含我的实体的元模型数据,这是我的实体和我的元模型的示例:
@Entity
@Table(name = "cards")
public class Card {
@Column(unique = true)
private String name;
}
@Generated(value="EclipseLink-2.6.0.v20140809-rNA", date="2015-01-07T09:16:03")
@StaticMetamodel(Card.class)
public class Card_ {
public static volatile SingularAttribute<Card, String> name;
}
这是我的标准class:
public class Criteria<T,U extends Serializable> {
private final SingularAttribute<? super T, U> attribute;
private final U parameter;
private final CriteriaOperator operator;
Criteria(SingularAttribute<? super T, U> attribute, U parameter, CriteriaOperator operator) {
this.attribute = attribute;
this.parameter = parameter;
this.operator = operator;
}
public static enum CriteriaOperator{
AND,OR,NOT;
}
public SingularAttribute<? super T, U> getAttribute() {
return attribute;
}
public U getParameter() {
return parameter;
}
public CriteriaOperator getOperator() {
return operator;
}
}
我在此处创建条件的新实例 class
33 public static void main(String[] args) {
34
35 Criteria<Card, String> criteria = new Criteria<Card, String>(Card_.name, "test", CriteriaOperator.AND);
36
37 if (criteria == null) {
38 System.out.println("Criteria is null");
39 } else {
40 System.out.println(criteria.getOperator().name());
41
42 SingularAttribute<? super Card, String> attribute = criteria.getAttribute();
43 if( attribute == null )
45 System.out.println("Attribute is null");
46 else
47 System.out.println(attribute.getName());
48
49 System.out.println(criteria.getParameter().toString());
50 }
51
52 }
编辑 1:删除了 gui 组件以使示例更加简单,包括实例化条件 class.
的主要函数显然需要打开与我的数据库的连接才能使 attribute.getName() 调用成功。一旦我创建了 EntityManagerFactory 和 EntityManager 的实例,调用就会起作用。一旦删除这两行,调用就会失败。