HHH-10111 - AttributeConverter based attributes are not marked for update when their state is modified

This commit is contained in:
Steve Ebersole 2015-09-24 17:03:53 -05:00
parent bb0b604b57
commit 70c9c8e855
6 changed files with 43 additions and 36 deletions

View File

@ -13,7 +13,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.persistence.AttributeConverter; import javax.persistence.AttributeConverter;
import javax.persistence.Column;
import javax.persistence.Convert; import javax.persistence.Convert;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
@ -29,12 +28,12 @@ import org.hibernate.type.Type;
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter; import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.junit.Test; import org.junit.Test;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
@ -89,6 +88,8 @@ public class BasicJodaTimeConversionTest {
final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType ); final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType );
assertTyping( JodaLocalDateConverter.class, type.getAttributeConverter() ); assertTyping( JodaLocalDateConverter.class, type.getAttributeConverter() );
int previousCallCount = 0;
try { try {
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -96,7 +97,8 @@ public class BasicJodaTimeConversionTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
previousCallCount = callsToConverter;
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -104,7 +106,7 @@ public class BasicJodaTimeConversionTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 2, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();

View File

@ -31,7 +31,7 @@ import org.hibernate.testing.TestForIssue;
import org.junit.Test; import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
@ -93,6 +93,8 @@ public class ExplicitDateConvertersTest {
final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType ); final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType );
assertTyping( LongToDateConverter.class, type.getAttributeConverter() ); assertTyping( LongToDateConverter.class, type.getAttributeConverter() );
int previousCallCount = 0;
try { try {
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -100,7 +102,8 @@ public class ExplicitDateConvertersTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
previousCallCount = callsToConverter;
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -108,7 +111,7 @@ public class ExplicitDateConvertersTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 2, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();

View File

@ -8,7 +8,6 @@ package org.hibernate.jpa.test.convert;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -31,7 +30,7 @@ import org.hibernate.testing.TestForIssue;
import org.junit.Test; import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
@ -101,6 +100,8 @@ public class ExplicitEnumConvertersTest {
final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType ); final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType );
assertTyping( MediaTypeConverter.class, type.getAttributeConverter() ); assertTyping( MediaTypeConverter.class, type.getAttributeConverter() );
int previousCallCount = 0;
try { try {
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -108,7 +109,8 @@ public class ExplicitEnumConvertersTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
previousCallCount = callsToConverter;
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -116,7 +118,7 @@ public class ExplicitEnumConvertersTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 2, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();

View File

@ -6,6 +6,12 @@
*/ */
package org.hibernate.jpa.test.convert; package org.hibernate.jpa.test.convert;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.AttributeConverter; import javax.persistence.AttributeConverter;
import javax.persistence.Convert; import javax.persistence.Convert;
import javax.persistence.Converter; import javax.persistence.Converter;
@ -14,13 +20,6 @@ import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
import javax.persistence.Id; import javax.persistence.Id;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.jpa.boot.spi.Bootstrap; import org.hibernate.jpa.boot.spi.Bootstrap;
@ -29,12 +28,11 @@ import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.type.Type; import org.hibernate.type.Type;
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter; import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test; import org.junit.Test;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
@ -68,7 +66,7 @@ public class SimpleConvertAnnotationTest extends BaseUnitTestCase {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( 0 < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();

View File

@ -6,6 +6,12 @@
*/ */
package org.hibernate.jpa.test.convert; package org.hibernate.jpa.test.convert;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.AttributeConverter; import javax.persistence.AttributeConverter;
import javax.persistence.Convert; import javax.persistence.Convert;
import javax.persistence.Converter; import javax.persistence.Converter;
@ -14,12 +20,6 @@ import javax.persistence.Entity;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
import javax.persistence.Id; import javax.persistence.Id;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
@ -29,12 +29,11 @@ import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.type.Type; import org.hibernate.type.Type;
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter; import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test; import org.junit.Test;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
@ -68,7 +67,7 @@ public class SimpleConvertsAnnotationTest extends BaseUnitTestCase {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( 0 < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();

View File

@ -33,7 +33,7 @@ import org.hibernate.testing.TestForIssue;
import org.junit.Test; import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
/** /**
* Jira HHH-8812 claims that explicit {@link javax.persistence.Convert} annotations are not processed when a orm.xml * Jira HHH-8812 claims that explicit {@link javax.persistence.Convert} annotations are not processed when a orm.xml
@ -111,6 +111,8 @@ public class XmlWithExplicitConvertAnnotationsTest {
final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType ); final AttributeConverterTypeAdapter type = assertTyping( AttributeConverterTypeAdapter.class, theDatePropertyType );
assertTyping( LongToDateConverter.class, type.getAttributeConverter() ); assertTyping( LongToDateConverter.class, type.getAttributeConverter() );
int previousCallCount = 0;
try { try {
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -118,7 +120,8 @@ public class XmlWithExplicitConvertAnnotationsTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 1, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
previousCallCount = callsToConverter;
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
@ -126,7 +129,7 @@ public class XmlWithExplicitConvertAnnotationsTest {
em.getTransaction().commit(); em.getTransaction().commit();
em.close(); em.close();
assertEquals( 2, callsToConverter ); assertTrue( previousCallCount < callsToConverter );
em = emf.createEntityManager(); em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();