3

次のエラーメッセージが表示されます

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 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); 
  }

私の仮定では、フィールドの名前は適切です。フィールドの最初の文字が小文字で、2番目の文字が大文字の場合、問題が示すように見えます。次のようなプロパティ名:

  • SSN
  • EMailStatus

大丈夫ですが、例えば

  • eMailStatus
  • xStatus

そうではありません。

ここで何が起こっている可能性があり、これをデバッグしてこれを修正する方法を見つけるにはどうすればよいですか?

「JavaBeanプロパティの命名規則はどこで定義されていますか?」のコメントで概説されているように、ここではJavaBean仕様の大文字化規則が原因であると推測してい ます。

4

1 に答える 1

4

基準クエリスニペット:

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

beanFieldコンテンツとしてeMailStatusではなくEMailStatusを使用して実行する必要があります-プロパティの名前がeMailStatusであり、Java Beanの規則により、ゲッターのみが大文字の「E」を持っている場合でも。理由はまだわかりませんが、他の回答もありがたいです。

Introspectorの大文字解除機能は、ここで役立つ可能性があります。

また、列の名前を「EMailStatus」に変更することもできます。

  /**
   * 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); 
  }
于 2013-02-13T17:43:01.880 に答える