Hibernate不会映射子类

时间:2016-08-29 19:40:43

标签: java 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>

我想要一个字段&#34; transformerId&#34;在子类中但不起作用... Hibernate只接受超类中的字段并忽略子类字段

异常抛出,应用程序死亡......

我需要Child类中的字段导致它特定于该类,我不希望它在超类中并且想要通过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

1 个答案:

答案 0 :(得分:0)

您有transformerID

在setter和getter中你有setTransformerId

注意ID

的区别

因此,您的字段名称应为transformerId而不是transformerID

这将解决您的问题。