/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.userguide.mapping.converter; import java.time.Period; import javax.persistence.Column; import javax.persistence.Convert; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.junit.Test; import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; import static org.junit.Assert.assertEquals; /** * @author Vlad Mihalcea */ public class PeriodStringTest extends BaseEntityManagerFunctionalTestCase { private Period period = Period.ofYears( 1 ).plusMonths( 2 ).plusDays( 3 ); @Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[] { Event.class }; } @Test public void testLifecycle() { doInJPA( this::entityManagerFactory, entityManager -> { Event event = new Event( period ); entityManager.persist( event ); } ); doInJPA( this::entityManagerFactory, entityManager -> { Event event = entityManager.createQuery( "from Event", Event.class ).getSingleResult(); assertEquals( period, event.getSpan() ); } ); doInJPA( this::entityManagerFactory, entityManager -> { //tag::basic-jpa-convert-period-string-converter-immutability-plan-example[] Event event = entityManager.createQuery( "from Event", Event.class ).getSingleResult(); event.setSpan(Period .ofYears( 3 ) .plusMonths( 2 ) .plusDays( 1 ) ); //end::basic-jpa-convert-period-string-converter-immutability-plan-example[] } ); } //tag::basic-jpa-convert-period-string-converter-mapping-example[] @Entity(name = "Event") public static class Event { @Id @GeneratedValue private Long id; @Convert(converter = PeriodStringConverter.class) @Column(columnDefinition = "") private Period span; //Getters and setters are omitted for brevity //end::basic-jpa-convert-period-string-converter-mapping-example[] public Event() { } public Event(Period span) { this.span = span; } public Long getId() { return id; } public Period getSpan() { return span; } public void setSpan(Period span) { this.span = span; } //tag::basic-jpa-convert-period-string-converter-mapping-example[] } //end::basic-jpa-convert-period-string-converter-mapping-example[] }