Не удается сохранить хэш-карту с JPA - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь сохранить карту на SQLserver с кодом ниже и продолжаю получать следующую ошибку:

* Причина: com.microsoft.sqlserver.jdbc.SQLServerException: Неверное имя объекта'OnlineReport_availabilities'.*

Я использую Play Framework JPA, для этого мне удавалось сохранять Карты раньше с похожим кодом.Я попытался вручную создать таблицу в БД, чтобы увидеть, была ли какая-то проблема с именем, но все кажется нормальным.

Я делаю что-то необычное или неправильное здесь?


   @Entity
    public class OnlineReport extends Model {</p>

<pre><code>    @Temporal(TemporalType.DATE)
    public Date date;

    @ElementCollection
    public Map<Date, Double> availabilities;

    public OnlineReport(){
        this.date = new Date();
        this.availabilities = new HashMap<Date, Double>();         
    }

    public void addAvailability(double availability){
        TreeSet<Date> set = new TreeSet(availabilities.entrySet());

        Date lastEntry = null;
        if(!set.isEmpty())
            lastEntry = set.last();

        Date now = new Date();
        if(lastEntry != null){
            //Add availibility every 10mn
            if(DateUtil.getMinutesBetween(lastEntry, now) >= 10){
                availabilities.put(now, availability);
                save();
            }
        } else {
            availabilities.put(now, availability);
            save();
        }
    }
}


Обновление.

Запуск JPA в debugSQL Я заметил следующие ошибки:

ОШИБКА ~ Неудачно: создатьтаблица OnlineReport_availabilities (OnlineReport_id числовой (19,0) не нулевой, доступность двойной точности нулевая, доступность_каталог даты / времени нулевой, первичный ключ (OnlineReport_id, availableabilities_KEY))

ERROR ~ Невозможно определить ограничение PRIMARY KEY дляОбнуляемый столбец в таблице «OnlineReport_availabilities».

У меня сложилось впечатление, что мне не хватает некоторого определения аннотации для «available».

1 Ответ

1 голос
/ 05 октября 2011

Скорее всего, у вас нет такой таблицы или она недоступна через используемое соединение. Являются ли имена объектов (таблиц, полей и т. Д.) Регистрозависимыми в БД?

Итак, после вашего обновления мы знаем, почему у вас нет таблицы. Похоже, он не может создать ненулевое ограничение для столбца, который является частью ключа. Диалект терпит неудачу для SQL Server, потому что ваше отображение минимально, но правильно. Вы можете попытаться форсировать его, добавив следующую аннотацию:

@MapKeyColumn(columnDefinition = "datetime not null")

Конечно, наличие даты и времени в составе ключа создаст проблемы, если возможно, что в миллисекунде будет более одной записи.

...