I Got a super class:
public class GlobalTranslationAbstract {
private String value;
private GlobalTranslationId globalTranslationId = new GlobalTranslationId();
public GlobalTranslationAbstract() {
}
public GlobalTranslationAbstract(String name, String value, String language) {
setName(name);
setValue(value);
setLanguage(language);
}
public GlobalTranslationAbstract(String name, String value, String language, long instanceId, long productId) {
setName(name);
setValue(value);
setLanguage(language);
setInstanceId(instanceId);
setProductId(productId);
}
public String getName() {
return globalTranslationId.getName();
}
public void setName(String name) {
globalTranslationId.setName(name);
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getLanguage() {
return globalTranslationId.getLanguage();
}
public void setLanguage(String language) {
globalTranslationId.setLanguage(language);
}
public void setInstanceId(long instanceId){
globalTranslationId.setInstanceId(instanceId);
}
public void setProductId(long productId){
globalTranslationId.setProductId(productId);
}
public long getInstanceId(){
return globalTranslationId.getInstanceId();
}
public long getProductId(){
return globalTranslationId.getProductId();
}
/**
* @deprecated Only to DB
*/
public GlobalTranslationId getGlobalTranslationId() {
return globalTranslationId;
}
/**
* @deprecated Only to DB
*/
public void setGlobalTranslationId(GlobalTranslationId globalTranslationId) {
this.globalTranslationId = globalTranslationId;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof GlobalTranslationAbstract))
return false;
GlobalTranslationAbstract that = (GlobalTranslationAbstract) o;
if (!globalTranslationId.equals(that.globalTranslationId))
return false;
return true;
}
@Override
public int hashCode() {
return globalTranslationId.hashCode();
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Name: ").append(getName());
sb.append("tValue: ").append(getValue());
sb.append("tLanguage: ").append(getLanguage());
return sb.toString();
}
}
和一个子类,这个类被映射到一个hbm.xml文件
public class GlobalTransformerTranslationImpl extends GlobalTranslationAbstract
implements GlobalTransformerTranslation {
private static AcseleLogger log = AcseleLogger.getLogger(GlobalTransformerTranslationImpl.class);
private static final GlobalTransformerTranslationPersister persister = GlobalTransformerTranslationPersister.Impl.getInstance();
private String transformerID;
/**
* @deprecated Only to DB
*/
public GlobalTransformerTranslationImpl() {
super();
}
public String getTransformerId() {
return transformerId;
}
public void setTransformerId(String transformerId) {
this.transformerId = transformerId;
}
public GlobalTransformerTranslationImpl(String name, String value, String language) {
super(name, value, language);
}
public void update() throws ApplicationException, TechnicalException {
persister.update(this);
}
public void delete() throws ApplicationException, TechnicalException {
persister.delete(this);
}
}
子类的hbm.xml文件:
<hibernate-mapping>
<class name="com.consisint.acsele.multilanguage.beans.impls.GlobalTransformerTranslationImpl" table="CDTR_TRANSFORMERTRANSLATION" >
<composite-id name="globalTranslationId" class="com.consisint.acsele.multilanguage.beans.impls.GlobalTranslationId" unsaved-value="any">
<key-property name="name" column="TTL_NAME"/>
<key-property name="language" column="TTL_LANGUAGE"/>
<key-property name="instanceId" column="INS_PK"/>
<key-property name="productId" column="PRO_ID"/>
</composite-id>
<property name="value" column="TTL_VALUE"/>
<property name="transformerId" column="TRF_ID"/>
</class>
我想有一个字段"transformerId"在子类,但不工作…Hibernate只接受父类中的字段,而忽略子类中的字段
抛出异常,应用程序终止…
我需要子类中的字段因为它是特定于那个类的我不希望它在超类中我想通过transformerId进行搜索但我不能
请帮忙谢谢
例外:
Caused by: net.sf.hibernate.PropertyNotFoundException: field not found: transformerId
at net.sf.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:74)
at net.sf.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:80)
at net.sf.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:80)
at net.sf.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:88)
at net.sf.hibernate.util.ReflectHelper.getter(ReflectHelper.java:81)
at net.sf.hibernate.util.ReflectHelper.reflectedPropertyType(ReflectHelper.java:86)
at net.sf.hibernate.mapping.SimpleValue.setTypeByReflection(SimpleValue.java:172)
... 55 more
你有transformerID
setter和getter中有setTransformerId
注意ID
情况的不同。
所以你的字段名应该是transformerId
而不是transformerID
。