对于AbstractEntityPersister类型,该方法未定义

时间:2014-08-04 14:10:36

标签: java eclipse hibernate undefined

我在eclipse 4.4.0中导入了一个现有的Java项目。我已经将所有必要的类变量添加到项目中,除了一次之外它都有效。

当我添加hibernationcore 4.2.2时。我收到了错误

The method getIdentifierColumnNames() is undefined for the type AbstractEntityPersister

getIdentifierGenerator()getIdentifierPropertyName()getTableName()相同。

然后有人在工作时给了我这本手册http://www.shivasoft.in/blog/java/hibernate/step-by-step-hibernate-tutorial-using-eclipse-wtp/,我设法安装了hibernate。 (步骤:"重新启动后,转到Window | Open Perspective | Other,出现以下对话框,选择Hibernate并单击Ok按钮。")。

但我仍有同样的问题。我是一个绝对的初学者,但我应该让它运行起来。我希望有人可以帮我们解决这个问题,因为在搜索互联网后我还没有找到解决方案。

修改: 也许更多的信息会有所帮助。

public Serializable saveEntity(Object entity) throws Exception{

    Serializable retObj = null;

    try{
        if (session == null){

            session = HibernateUtil.getSessionFactory().openSession();
        }
        logger.debug("Save Entity:" + entity.getClass().getName());
        ClassMetadata cm = HibernateUtil.getSessionFactory().getClassMetadata(entity.getClass());
        AbstractEntityPersister persister = (AbstractEntityPersister)cm;
        IdentifierGenerator idGen = persister.getIdentnedifierGenerator();

        if (idGen instanceof org.hibernate.id.Assigned){

            String tableName = persister.getTableName();
            String idColName = persister.getIdentifierColumnNames()[0];
            String idPropName = persister.getIdentifierPropertyName().substring(0,1).toUpperCase() + persister.getIdentifierPropertyName().substring(1);
            Method setIdMethod = entity.getClass().getMethod("set" + idPropName, BigInteger.class);
            Method getIdMethod = entity.getClass().getMethod("get" + idPropName);
            BigInteger id = (BigInteger)getIdMethod.invoke(entity);

            if (id == null || id.equals(BigInteger.ZERO)){

                id = getNewId(tableName, idColName);
            }

            if (id == null){
                logger.error("Fehler bei Save: " + entity.getClass().getName() + "! Es konnte keine Id erzeugt werden!");
                return null;
            }

            setIdMethod.invoke(entity, id);
        }

        retObj = session.save(entity);
    }
    catch (Exception e){

        retObj = null;
        logger.error(e);
        throw e;
    }

    return retObj;
}

我希望这有助于描述问题。

修改 这些是我使用的印记。

package hl.dbl.util;

import hl.entities.admin.IdSequence;

import java.io.Serializable;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;

import org.hibernate.LockOptions;

import org.hibernate.ScrollableResults;
import org.hibernate.Transaction;

import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.persister.entity.AbstractEntityPersister;

0 个答案:

没有答案