Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 托管类型[…]中的属性[…]不存在(对于具有小写/大写名称的字段)_Jpa - Fatal编程技术网

Jpa 托管类型[…]中的属性[…]不存在(对于具有小写/大写名称的字段)

Jpa 托管类型[…]中的属性[…]不存在(对于具有小写/大写名称的字段),jpa,Jpa,出现以下错误消息 java.lang.IllegalArgumentException: The attribute [eMailStatus] from the managed type [EntityTypeImpl@902966747:PersonJpaDao [ javaType: class com.bitplan.smartCRM.jpa.PersonJpaDao descriptor: RelationalDescriptor(com.bitplan.smart

出现以下错误消息

java.lang.IllegalArgumentException: 
The attribute [eMailStatus] 
from the managed type [EntityTypeImpl@902966747:PersonJpaDao 
   [ javaType: class com.bitplan.smartCRM.jpa.PersonJpaDao descriptor: 
   RelationalDescriptor(com.bitplan.smartCRM.jpa.PersonJpaDao --> [DatabaseTable(Person)]),  
   mappings: 46]] 
is not present.
    at 
 org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getAttribute(ManagedTypeImpl.java:147)
注释、getter和setter存在时:

 /**
   * getter for xsd:string/String EMailStatus
   * @return eMailStatus
   */
  @Column(name="eMailStatus")
  public String getEMailStatus() { 
    return getPersonImpl().getEMailStatus(); 
  }

  /**
   * setter for xsd:string/String EMailStatus
   * @param peMailStatus - new value for EMailStatus
   */
  public void setEMailStatus(String peMailStatus) { 
    getPersonImpl().setEMailStatus(peMailStatus); 
  }
我的假设是,字段的命名是相关的: 如果字段的第一个字母是小写,第二个字母是大写,则问题似乎会出现。PropertyName类似于:

  • SSN
  • 电子邮件状态
你没问题,但是

  • 电子邮件状态
  • 克斯塔特斯
不是

这里可能发生了什么,我如何调试它来找出如何修复它

我猜JavaBean规范的大写规则是罪魁祸首,正如在

条件查询片段:

Path<String> beanValue = qh.from.<String> get(beanField);

我有一些像cq.where(cb.like(cb.lower(root.get(propertyName)),value));它忽略了将其转换为小写的大小写,但仍然只有在按照CALS中声明的字段保持精确的大小写敏感度时才起作用。
  /**
   * getter for xsd:string/String EMailStatus
   * @return eMailStatus
   */
  @Column(name="EMailStatus")
  public String getEMailStatus() { 
    return getPersonImpl().getEMailStatus(); 
  }

  /**
   * setter for xsd:string/String EMailStatus
   * @param peMailStatus - new value for EMailStatus
   */
  public void setEMailStatus(String peMailStatus) { 
    getPersonImpl().setEMailStatus(peMailStatus); 
  }