Непредвиденная ошибка JPA: неверное имя столбца - PullRequest
0 голосов
/ 13 февраля 2011

Использование jboss5.1.x, ejb3.0

Это сводило меня с ума уже два дня:

Я пытаюсь выполнить простой запрос по пунктам и получаю эту ошибку:


вот что я получаю с помощью запроса JPSQL:

       String queString ="select s from T04SysParms s WHERE s.key_Name='EXECUTION_TIME'"; 
        Query q = em.createQuery(queString); 
        List<T04SysParms> results = (List<T04SysParms>) q.getResultList(); 

Исключение я получаю:

org.hibernate.QueryException: не удалось разрешить свойство: имя_ключа: com.mirs.ecms.db2.T04SysParms [выберите s из com.mirs.ecms.db2.T04SysParms s ГДЕ s.key_Name = 'EXECUTION_TIME']


это мой класс mappe:

@Entity
@Table(name = "T04_SYS_PARMS", schema = "ECMS")
public class T04SysParms implements java.io.Serializable
{

// Fields

private String key_Name;
private String value_Name;

// Constructors

/** default constructor */
public T04SysParms()
{
}

/** minimal constructor */
public T04SysParms(String keyName)
{
    this.key_Name = keyName;
}

/** full constructor */
public T04SysParms(String keyName, String valueName)
{
    this.key_Name = keyName;
    this.value_Name = valueName;
}

// Property accessors
@Id
@Column(name = "KEY_NAME", unique = true, nullable = false, length = 100)
public String getKeyName()
{
    return this.key_Name;
}

public void setKeyName(String keyName)
{
    this.key_Name = keyName;
}

@Column(name = "VALUE_NAME", length = 200)
public String getValueName()
{
    return this.value_Name;
}

public void setValueName(String valueName)
{
    this.value_Name = valueName;
}

}

Фактическое имя таблицы в базе данных: T04_SYS_PARMS имя сопоставленной таблицы: T04SysParms

есть идеи? Спасибо, лучей. * * тысяча двадцать-один

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Проблема заключается в одном из имен столбцов.Убедитесь, что у вас есть столбец VALUE и столбец KEY_NAME.Также возьмите автомобиль для потенциальной чувствительности к регистру.

Кстати, я не понимаю, почему вам нужен собственный запрос здесь.Не можете ли вы использовать JPQL-запрос?Обратите внимание, что в JPQL-запросах вы должны ссылаться на классы и поля, а не на таблицы и столбцы.Так что это не KEY, а, вероятно, key.

Кстати, KEY иногда резервируется базами данных (например, VALUE, как другие предлагали)Как насчет этого - откройте инструмент администратора базы данных и попробуйте выполнить запрос.Только после того, как это сработает, переместите его в свой код.

0 голосов
/ 13 февраля 2011

VALUE - зарезервированное слово в стандарте sql.У вас есть колонка с таким названием?Если это так, вам может потребоваться процитировать его в запросе.Или, лучше, измените его на более значимое имя.

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

Вы такжепоказывает запросы, которые получают только поле VALUE_NAME, но затем вы пытаетесь извлечь из результата целый T04SysParms.

На основе обновления, включая сопоставления, JPQL-версия запроса:

String queString ="select s from T04SysParms WHERE s.keyName='EXECUTION_TIME'";
Query q = em.createQuery(queString);
List<T04SysParms> results = (List<T04SysParms>) q.getResultList();

должен вернуть вам список объектов T04SysParms, соответствующих вашим потребностям.

Должна быть возможность сделать что-то похожее с формой SQL (настроить ее для получения всех полей), но для получения сущностейJPQL более подходит, чем отдельные поля.

...