org.hibernate.hql.ast.QuerySyntaxException: таблица не сопоставлена

Я знаю, что многие люди задавали этот вопрос, но я только начал Java, поэтому я не мог понять до сих пор.

Итак, вот моя проблема: я пишу веб-сервисы RESTful, используя Javarestlet, Вот фрагмент моего DAO файл.

try {

            session.beginTransaction();

            String query = "select number from   blockedcli";
            @SuppressWarnings("rawtypes")
            List list = session.createQuery(query).list(); //.setString("sId", businessId)


            logger.error("*******************list*****************************************");
            logger.error(list);
            logger.error("*******************listend*****************************************");


            @SuppressWarnings("rawtypes")
            Iterator iterator = list.iterator();

            while (iterator.hasNext()) {

                blockedcli = (BlockedCli) iterator.next();
            }
            session.getTransaction().commit();
        } 

Соответственно мой класс сущности выглядит так.

@Entity
@Table(name = "blockedcli")
public class BlockedCli implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="idBlockedCLI", nullable = false, unique=true)
    private Integer idBlockedCLI;

    @Column(name = "number",nullable = false, length=45)
    private String number;

    @Column(name = "type", nullable = false)
    private Integer type;
    .

Я разместил BlackListedN.hbm.xml файл в моем каталоге конфигурации со следующим текстом.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="tecd.persistence.entity.BlockedCli" table="blockedcli">    
    <id name="idBlockedCLI" type="long" unsaved-value="null">
        <column name="idBlockedCLI" not-null="true"/>
        <generator class="identity"/>
    </id>
        <property name="number">
            <column name="number" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

Как я хочу отображать только номер.

А вот и таблица БД.

+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+
| idBlockedCLI | number       | status | type | createdDT           | updatedDT           | BusinessDirectory_idBusinessDirectory |
+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+
|            1 | 919845611234 |      1 |    1 | 2014-03-24 13:31:20 | 2014-03-24 13:31:20 | 1                                     |
+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+

Но когда я запускал это Каждый раз, когда это говорит

org.hibernate.hql.ast.QuerySyntaxException: blockedcli is not mapped [select number from   blockedcli]

Пожалуйста, помогите мне исправить эту проблему.

Это моя первая Java-программа, поэтому я не уверен, что еще требуется для ее разработки, однако, дайте мне знать, если что-то еще потребуется.

5 ответов

При использовании HQL необходимо обращаться к правильно прописным именам / свойствам сущностей, а не к именам таблиц / столбцов. Просто измените ваш запрос на select number from BlockedCliи это должно работать.

Попробуйте изменить имя объекта в запросе

select b.number from BlockedCli b

ИЛИ, если вы не хотите менять имя запроса, вы можете установить name атрибут Entity аннотирование

@Entity(name="blockedcli")

Также проверьте для hibernate-cfg.xml содержит ли он запись для сопоставления Java-объекта.

<mapping class="com.yourpackage.App" />

Я столкнулся с этой проблемой, но в моем случае проблема была из-за версии gradle. Когда я изменил свою систему с linux на mac, мне пришлось переключиться с gradle-1.0-milestone-3 на gradle-1.0-milestone-4, поскольку milestone-3 не работает в OSX. И в gradle-1.0-milestone-4 я столкнулся с той же проблемой, после чего мне пришлось понизить версию gradle до gradle-1.0-milestone-1. Сейчас работает нормально

Установите имя для аннотации сущности

@Entity(name="blockedcli")

Затем установите ваш запрос, как показано ниже.

String query = "select b.number from blockedcli b";
Другие вопросы по тегам