Советы JPA: как отобразить атрибут Duration

  1. Вопрос:
  2. Не хочешь читать? Вы можете посмотреть это здесь!
  3. Решение:
  4. Hibernate делает это легко
  5. JPA требует немного работы
  6. Получите этот совет Hibernate в формате PDF для печати!
  7. Учить больше:

Hibernate Советы   это серия постов, в которых я описываю быстрое и простое решение общих вопросов Hibernate

Hibernate Советы это серия постов, в которых я описываю быстрое и простое решение общих вопросов Hibernate. Если у вас есть вопрос по будущему Hibernate Tip, оставьте комментарий ниже.

Вопрос:

В JPA 2.2 не добавлена ​​поддержка java.time.Duration . Как я могу сопоставить атрибут этого типа с JPA?

Не хочешь читать? Вы можете посмотреть это здесь!


Посмотри это видео на YouTube

Решение:

К сожалению, JPA 2.2 поддерживает только некоторые классы API даты и времени, и java.time.Duration не является одним из них. Если вы ограничены простым JPA, вам необходимо реализовать пользовательское сопоставление для атрибутов типа Duration . Как вы увидите, это не так сложно, как может показаться.

Hibernate делает это легко

Но прежде чем мы углубимся в детали, я хочу показать вам более удобный подход. Начиная с версии 5, Hibernate поддерживает java.time.Duration в качестве базового типа. , Таким образом, если вам разрешено использовать проприетарные функции Hibernate, вы можете использовать атрибуты сущностей типа Duration без каких-либо дополнительных аннотаций сопоставления.

@Entity открытый класс OnlineCourse {@Id @GeneratedValue private Длинный идентификатор; частное название строки; частная продолжительность видеодлительность; ...}

JPA требует немного работы

Если вы не используете Hibernate или если некоторые внутренние правила запрещают вам использовать проприетарные функции, вы можете реализовать собственное отображение с помощью простого AttributeConverter , В этом конвертере необходимо сопоставить неподдерживаемый объект Duration с объектом поддерживаемого типа.

Например, вы можете преобразовать объект Duration в long, который представляет количество наносекунд длительности. Просто знайте, что это ограничивает вашу продолжительность чуть более 292 лет. Этого должно быть достаточно для большинства приложений. Если вам нужно хранить более длительную продолжительность, вам нужно будет уменьшить точность, например, сохранить количество миллисекунд.

Реализация такого преобразователя относительно проста. Вам просто нужно реализовать AttributeConverter Интерфейс <Duration, Long> и аннотируйте класс @Converter аннотаций. Вам следует установить для атрибута autoApply аннотации значение true. Это говорит провайдеру персистентности использовать конвертер для всех атрибутов сущности типа java.time.Duration .

Здесь вы можете увидеть пример такого AttributeConverter . В методе convertToDatabaseColumn я вызываю метод toNanos объекта Duration, чтобы преобразовать его в long . И метод convertToEntityAttribute использует метод of с ChronoUnits.NANOS для реализации обратного преобразования.

@Converter (autoApply = true) открытый класс DurationConverter реализует AttributeConverter <Duration, Long> {Logger log = Logger.getLogger (DurationConverter.class.getSimpleName ()); @Override public Long convertToDatabaseColumn (атрибут Duration) {log.info ("Преобразовать в длинный"); return attribute.toNanos (); } @Override public Duration convertToEntityAttribute (Long duration) {log.info ("Преобразовать в длительность"); вернуть Duration.of (duration, ChronoUnit.NANOS); }}

Это все, что вам нужно сделать. Теперь вы можете использовать объект OnlineCourse, который я показал вам в начале этого поста. Ваш поставщик сохраняемости автоматически применяет DurationConverter, так что вам не нужно адаптировать отображение сущностей.

// Транзакция 1: сохранить новую сущность OnlineCourse EntityManager em = emf.createEntityManager (); em.getTransaction () начинается (). OnlineCourse c = новый OnlineCourse (); c.setTitle («Онлайн-тренировка по настройке производительности Hibernate»); c.setVideoDuration (Duration.parse ( "PT5H55M")); em.persist (с); em.getTransaction () фиксации (). em.close (); // Транзакция 2: чтение сущности OnlineCourse em = emf.createEntityManager (); em.getTransaction () начинается (). em.find (OnlineCourse.class, c.getId ()); log.info ("+ c.getTitle () +" содержит "+ c.getVideoDuration (). toMinutes () / 60+" часов и "+ c.getVideoDuration (). toMinutes ()% 60+" минут видео"); em.getTransaction () фиксации (). em.close ();

Как вы можете видеть в выходных данных журнала, DurationConverter вызывается дважды для сопоставления атрибута videoDuration :

  1. Когда сущность сохраняется, вызывается метод convertToDatabaseColumn для сопоставления Duration с длинным объектом
  2. Когда объект считывается из базы данных, вызывается метод convertToEntityAttribute для сопоставления объекта Long с объектом Duration.

17: 47: 15,197 DEBUG [org.hibernate.SQL] - выберите nextval ('hibernate_sequence') 17: 47: 15,241 DEBUG [org.hibernate.SQL] - вставьте в OnlineCourse (название, версия, videoDuration, id) значения (? ,?,?,?) 17: 47: 15,246 INFO [DurationConverter] - конвертировать в длинный 17: 47: 15,276 DEBUG [org.hibernate.SQL] - выберите onlinecour0_.id в качестве id1_0_0_, onlinecour0_.title в качестве title2_0_0_, onlinecour0_.version как version3_0_0_, onlinecour0_.videoDuration как videoDur4_0_0_ из онлайн-курса onlinecour0_, где onlinecour0_.id =? 17: 47: 15,290 INFO [DurationConverter] - преобразовать в продолжительность 17: 47: 15,294 INFO [org.blyts.on.java.model.TestAttributeConverter] - онлайн-тренинг по настройке производительности Hibernate содержит 5 часов и 55 минут видео

Получите этот совет Hibernate в формате PDF для печати!

Присоединяйтесь к бесплатной статье «Мысли о библиотеке Java», чтобы получить доступ к большому количеству контента, предназначенного только для членов, например, к печатному PDF для этого поста, множеству шпаргалок и 2 электронным книгам о Hibernate.

Учить больше:

AttributeConverter - это мощная и простая в использовании функция. Вы можете использовать его для:


Hibernate Советы


Похожие

Как мне запрограммировать Honeywell 5800WAVE на L5210?
... это функция, которая позволяет определенным устройствам беспроводной линии 5800 использовать двунаправленную связь. Все беспроводные устройства 5800 без идентификатора дома обмениваются данными только с панелью. Для 5800WAVE требуется идентификатор дома, поскольку это позволяет L5210 связываться с беспроводной сиреной для включения устройства.
Нижний колонтитул в интернет-магазине: почему это так важно?
Нижний колонтитул адреса - это часть интернет-магазина, которая содержит ссылки на
Как установить и использовать консоль восстановления Windows XP
Оглавление Что такое консоль восстановления? Как установить консоль восстановления на жесткий диск Как запустить консоль восстановления Удалить запрос пароля Как использовать консоль восстановления Удаление
Как отслеживать доход вашего сайта с помощью Google Analytics
Хотя некоторые люди создают
Смартфон не обнаружен ПК - это исправить
Майк Белшнер 02. июнь 2015 в 15:58 • около 4 минут чтения
Как исправить ошибку 3194 при обновлении iPhone и iPad
... это одна из самых распространенных ошибок в устройствах iOS и, к счастью, в большинстве случаев она имеет простое решение. Есть несколько причин, которые могут вызвать ошибку 3194 при обновлении или восстановлении устройства iOS. Среди этих причин мы находим: iTunes не может подключиться к серверу обновлений и восстановления Apple (gs.apple.com). Обычно эта ошибка связана с проблемами подключения к Интернету с компьютера, на котором установлен iTunes.
Интернет от Netia без комиссии за поддержание ссылки? Это возможно!
Сегодня компания Netia представила новые рекламные предложения для широкополосного доступа в Интернет по традиционным сетям Orange Polska. Предложения характеризуются отсутствием или только символической платой за поддержание ссылки. Вы можете купить интернет например привлекательные мобильные тарифы и персональное ТВ. В предложении для индивидуальных клиентов услуга доступа в Интернет на скорости до 80 Мбит / с стоит 49,90 злотых с учетом НДС. Плата за поддержание связи при
Прыжки с трамплина совершенно другие, чем те, которые вы знаете
Поляки прыжков с трамплина в основном ассоциируются с Малышем, Стохом и Велькой Кроквией. И все мы точно знаем, кто они: прыгун спускается, чтобы выбраться из двери, пролететь как можно дальше и приземлиться изящным телемарком. Freeskiing - это совершенно другой подход к полету с застрявшими ногами в лыжах. Лыжники, практикующие этот вид спорта, играют с гравитацией и устанавливают свои
Решено: слот PCMCIA не работает на ноутбуке Dell Latitude E5520
Привет SpeedStep. СООБРАЖЕНИЯ ПО ВАШЕМУ ПОСТУ Я ценю ваши усилия в ответ на мой пост. Это хороший репозиторий проблем, связанных с проблемами PCMCIA / PC Card / Cardbus и некоторыми обходными путями. Я вижу, это обновленная версия вашего поста Вот : http://en.community.dell.com/support-forums/laptop/f/3518/p/19351953/19897449.aspx
Всемирная паутина: учит или вредит?
Константин Ингатьев, Еврейский Колотинский Эксперты из Лаборатории Касперского Большинство пользователей компьютеров рассматривают Интернет как часть повседневной жизни. Многие из них используют его постоянно, на работе и дома, и не могут представить себе жизнь без этого инструмента, который, учитывая,
Как сканировать на вирусы с помощью ClamAV в Ubuntu
... этому большинство людей, использующих такие системы, даже не беспокоятся об использовании антивирусного программного обеспечения. Однако те, кто хочет иметь возможность сканировать свою систему или другие системы на базе Windows, которые подключены к ПК с Linux через сеть, могут использовать ClamAV. ClamAV - это антивирусный движок с открытым исходным кодом, созданный для обнаружения вирусов, троянов, вредоносных программ и других угроз. Он поддерживает несколько форматов файлов (документы,

Комментарии

Читать далее ?
Как ваш инструмент SAM обрабатывает Java? Что на дорожной карте? Сайт Oracle Java SE Roadmap сообщает нам, что: «… Oracle не будет публиковать дальнейшие обновления Java SE 8 на своих общедоступных
Если нет, как вы можете защитить свои данные, не заплатив выкуп?
Если нет, как вы можете защитить свои данные, не заплатив выкуп? Читать далее , Даже если вы постоянно обновляете программное обеспечение, такое как Java, ваш компьютер все еще находится в опасности, если вы не устанавливаете обновления Windows. Windows 10 делает эти автоматические обновления простыми
Нет, я не имею в виду, насколько быстро вы думаете, или как быстро ваш сетевой провайдер говорит об этом - я имею в виду, насколько быстро это происходит в реальных условиях?
Нет, я не имею в виду, насколько быстро вы думаете, или как быстро ваш сетевой провайдер говорит об этом - я имею в виду, насколько быстро это происходит в реальных условиях? Тест скорости сети это отличный, бесплатный способ узнать. LAN Speed ​​Test быстро сообщает вам скорость вашей сети, но не может распечатать результаты на диск.
Как обеспечить качественное изображение, как быстро оно становится четким, и как оно делает снимки на практике?
Как обеспечить качественное изображение, как быстро оно становится четким, и как оно делает снимки на практике? В чем разница между Sigma 70-300 APO DG и Canon 70-300 IS USM? Узнайте больше в нашем обзоре. Canon EF-S 55-250mm f / 4-5.6 IS, который мы позаимствовали в магазине Digihit.cz является часто используемым телеобъективом на практике. Это стоит сравнительно небольших
Нашли мод, без которого вы не можете жить?
Нашли мод, без которого вы не можете жить? Дайте нам знать! И если вы еще этого не сделали, обязательно ознакомьтесь с нашими руководство по началу работы в Minecraft , и наш руководство по настройке собственного сервера , Чтобы прокомментировать эту статью и другой контент PCWorld, посетите наш
Это могут быть мелочи, полезная информация, не обязательно тесно связанная с продуктами, но, возможно, сама отрасль, в которой вы работаете?
Это могут быть мелочи, полезная информация, не обязательно тесно связанная с продуктами, но, возможно, сама отрасль, в которой вы работаете? Позаботьтесь, однако, о том, что в вашем колонтитуле нет хаоса. Так что подстраницы и контент сгруппированы в четкой форме. Это экономит вашу работу и потребителя прежде всего, потому что он быстро получит информацию, которую хочет. Наше предложение сгруппировать ссылки: ☞ О нас ☞ информация ☞ Оплата и доставка ☞ Помощь
Если вы хотите экспортировать диапазон данных в виде веб-страницы (HTML-файл), как вы справляетесь с этим?
Если вы хотите экспортировать диапазон данных в виде веб-страницы (HTML-файл), как вы справляетесь с этим? В этой статье мы обсудим, как быстро экспортировать данные Excel в выборку в файл HTML. Экспорт данных Excel в HTML-файлы с помощью команды «Сохранить как» Экспорт данных Excel в HTML-файлы с Kutools для Excel Экспортируйте область данных из файла Excel в
Если вы рассматриваете программу активного трейдера, вы можете сначала спросить: сколько я планирую торговать в течение календарного месяца?
Если вы рассматриваете программу активного трейдера, вы можете сначала спросить: сколько я планирую торговать в течение календарного месяца? Как доступные ставки маржи у моего брокера повлияют на размер моей сделки и общий объем? Насколько чувствительна моя торговая стратегия к ставкам спреда / комиссии? Другими факторами, которые могут сыграть решающую роль в вашем общем опыте, являются метод исполнения, типы ордеров, торговые платформы и другие подобные предпочтения. Как выбрать
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере?
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере? Ответ прост, в браузере. Недостаток очевиден: если вы можете отлаживать JavaScript через браузер, клиент также может, т. Е. Клиент на другом компьютере в другой части мира, также может получить доступ к системе и отладить файлы JavaScript. Риск этого будет зависеть от того, как реализован ваш код. Примечательно, что язык JavaScript
Если вы видите сообщение: «Хотите запустить это приложение?
Если вы видите сообщение: «Хотите запустить это приложение? (Расположение: https://bannererp.wellesley.edu:4452 ) ", нажмите" Выполнить ". На этом этапе вы сможете войти в систему Banner ERP. Если вы не можете это сделать, убедитесь, что вы выполнили все перечисленные выше действия. Если вы по-прежнему не можете войти в систему, позвоните в службу поддержки по телефону x3333. 10) Нажмите
Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом?
Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом? Читать далее ) которые программисты могут использовать для простого взаимодействия с определенными службами, такими как Windows Store. Вместо того, чтобы писать вручную весь код, который требуется приложению, чтобы его можно было считать, например, приложением UWP (универсальная платформа Windows), .NET Framework

Как я могу сопоставить атрибут этого типа с JPA?
Не хочешь читать?
Id =?
Нижний колонтитул в интернет-магазине: почему это так важно?
Интернет от Netia без комиссии за поддержание ссылки?
Если вы хотите экспортировать диапазон данных в виде веб-страницы (HTML-файл), как вы справляетесь с этим?
Если вы рассматриваете программу активного трейдера, вы можете сначала спросить: сколько я планирую торговать в течение календарного месяца?
Как доступные ставки маржи у моего брокера повлияют на размер моей сделки и общий объем?
Насколько чувствительна моя торговая стратегия к ставкам спреда / комиссии?
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере?