2016-08-29 8 views
0

をマップdoesntの:Hibernateは私がスーパークラスを手に入れた子クラス

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 

答えて

0

あなたはtransformerIDです。

セッターとゲッターにはsetTransformerIdがあります。

IDの場合の違いに注目してください。

フィールド名はtransformerIdで、transformerIDではありません。

これで問題は解決します。

+0

私は同じフィールドを別のhbm.xmlファイルに入れていましたが、それは問題でした...しかし、ありがとう –

関連する問題