属性[...]从被管理型[...]不存在(用于与小写/大写名称
问题描述:
字段的出现以下错误消息属性[...]从被管理型[...]不存在(用于与小写/大写名称
java.lang.IllegalArgumentException:
The attribute [eMailStatus]
from the managed type [[email protected]: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);
}
我的假设是,该领域的命名是相关的: 如果该字段的第一个字母小写,而不是问题似乎表明,二是大写Propertynames这样的:
- SSN
- EMailStatus
是o.k但例如
- eMailStatus
- xStatus
都没有。
这里可能会发生什么,我怎么能调试这个找出如何解决这个问题?
我猜测JavaBean的规范资本规则是罪魁祸首这里在 Where is the JavaBean property naming convention defined?
答
条件查询片断评论概述:
Path<String> beanValue = qh.from.<String> get(beanField);
必须与EMailStatus做不eMailStatus为beanField的内容 - 即使属性的名称是eMailStatus,并且由于java bean约定,只有getter有一个upperCase“E”。我还没有找到为什么 - 所以其他答案仍然赞赏。
Introspector decapitalize function在这里可能会有所帮助。
它也可以重命名列 “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);
}
我有这样的事情cq.where(cb.like(cb.lower(根 GET(propertyName的)),值)) ;忽略大小写将其转换为小写的情况,但只有在确切的大小写敏感性按照在calss中声明的字段进行维护时才有效。 –
2015-10-01 14:42:27