Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build/config/src/main/resources/forbidden-runtime.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ org.hibernate.**.internal.**
@defaultMessage Favor EntityManager methods over their Session equivalent
org.hibernate.Session.save(java.lang.Object) @ Use persist() instead
org.hibernate.Session.save(java.lang.String, java.lang.Object) @ Use persist() instead
org.hibernate.Session.update(java.lang.Object) @ Use merge() instead
org.hibernate.Session.update(java.lang.String, java.lang.Object) @ Use merge() instead
org.hibernate.Session.load(java.lang.Class<T>, java.lang.Object) @ Use getReference() instead
org.hibernate.Session.delete(java.lang.Object) @ Use remove() instead
org.hibernate.Session.delete(java.lang.String, java.lang.Object) @ Use remove() instead
Expand Down
3 changes: 3 additions & 0 deletions build/config/src/main/resources/forbidden-tests.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ org.hibernate.tool.schema.Action @ Hibernate ORM doesn't support passing Action
@defaultMessage Favor EntityManager methods over their Session equivalent
org.hibernate.Session.save(java.lang.Object) @ Use persist() instead
org.hibernate.Session.save(java.lang.String, java.lang.Object) @ Use persist() instead
# Allowed for test code: we need to test those methods.
#org.hibernate.Session.update(java.lang.Object) @ Use merge() instead
#org.hibernate.Session.update(java.lang.String, java.lang.Object) @ Use merge() instead
org.hibernate.Session.load(java.lang.Class<T>, java.lang.Object) @ Use getReference() instead
org.hibernate.Session.delete(java.lang.Object) @ Use remove() instead
org.hibernate.Session.delete(java.lang.String, java.lang.Object) @ Use remove() instead
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,18 +80,14 @@ public void multipleChangesSameTransaction() {
session.persist( entity3 );

entity1.setText( "initialValue II" );
session.update( entity1 );
entity2.setText( "initialValue II" );
session.update( entity2 );
entity3.setText( "initialValue II" );
session.update( entity3 );
session.flush();

entity1.setText( "initialValue III" );
session.update( entity1 );
entity2.setText( "initialValue III" );
session.update( entity2 );
entity3.setText( "initialValue III" );
session.update( entity3 );
session.flush();

backendMock.expectWorks( IndexedEntity.NAME )
.add( "1", b -> b
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,10 +359,11 @@ public void sessionClear() {
}

/**
* Test that merging an entity to change an indexed field
* Test that merging an entity using update() to change an indexed field
* triggers reindexing of the indexed entity owning the property.
*/
@Test
@SuppressWarnings("deprecation") // This is specifically about "update", which is NOT strictly equivalent to "merge"
public void sessionUpdate_directValueUpdate_indexedField() {
setupHolder.runInTransaction( session -> {
IndexedEntity entity1 = new IndexedEntity();
Expand All @@ -387,7 +388,7 @@ public void sessionUpdate_directValueUpdate_indexedField() {

session.update( entity1 );

// Hibernate ORM does not track dirtiness on merges: we assume everything is dirty.
// Hibernate ORM does not track dirtiness on calls to update(): we assume everything is dirty.
backendMock.expectWorks( IndexedEntity.INDEX )
.addOrUpdate( "1", b -> b
.field( "indexedField", entity1.getIndexedField() )
Expand All @@ -399,9 +400,10 @@ public void sessionUpdate_directValueUpdate_indexedField() {
}

/**
* Test that merging an entity to change an non-indexed field
* Test that merging an entity using update() to change a non-indexed field
* triggers reindexing of the indexed entity owning the property:
*/
@SuppressWarnings("deprecation") // This is specifically about "update", which is NOT strictly equivalent to "merge"
@Test
@TestForIssue(jiraKey = "HSEARCH-3199")
public void sessionUpdate_directValueUpdate_nonIndexedField() {
Expand Down Expand Up @@ -439,6 +441,78 @@ public void sessionUpdate_directValueUpdate_nonIndexedField() {
backendMock.verifyExpectationsMet();
}

/**
* Test that merging an entity using merge() to change an indexed field
* triggers reindexing of the indexed entity owning the property.
*/
@Test
public void sessionMerge_directValueUpdate_indexedField() {
setupHolder.runInTransaction( session -> {
IndexedEntity entity1 = new IndexedEntity();
entity1.setId( 1 );
entity1.setIndexedField( "initialValue" );

session.persist( entity1 );

backendMock.expectWorks( IndexedEntity.INDEX )
.add( "1", b -> b
.field( "indexedField", entity1.getIndexedField() )
.field( "shallowReindexOnUpdateField", null )
.field( "noReindexOnUpdateField", null )
);
} );
backendMock.verifyExpectationsMet();

setupHolder.runInTransaction( session -> {
IndexedEntity entity1 = new IndexedEntity();
entity1.setId( 1 );
entity1.setIndexedField( "updatedValue" );

session.merge( entity1 );

backendMock.expectWorks( IndexedEntity.INDEX )
.addOrUpdate( "1", b -> b
.field( "indexedField", entity1.getIndexedField() )
.field( "shallowReindexOnUpdateField", null )
.field( "noReindexOnUpdateField", null )
);
} );
backendMock.verifyExpectationsMet();
}

/**
* Test that merging an entity using merge() to change a non-indexed field
* does not trigger reindexing of the indexed entity owning the property.
*/
@Test
@TestForIssue(jiraKey = "HSEARCH-3199")
public void sessionMerge_directValueUpdate_nonIndexedField() {
setupHolder.runInTransaction( session -> {
IndexedEntity entity1 = new IndexedEntity();
entity1.setId( 1 );
entity1.setNonIndexedField( "initialValue" );

session.persist( entity1 );

backendMock.expectWorks( IndexedEntity.INDEX )
.add( "1", b -> b
.field( "indexedField", entity1.getIndexedField() )
.field( "shallowReindexOnUpdateField", null )
.field( "noReindexOnUpdateField", null )
);
} );
backendMock.verifyExpectationsMet();

setupHolder.runInTransaction( session -> {
IndexedEntity entity1 = new IndexedEntity();
entity1.setId( 1 );
entity1.setNonIndexedField( "updatedValue" );

session.merge( entity1 );
} );
backendMock.verifyExpectationsMet();
}

public Consumer<StubDocumentNode.Builder> expectedValue(String indexedFieldExpectedValue) {
return b -> b.field( "indexedField", indexedFieldExpectedValue )
.field( "shallowReindexOnUpdateField", null )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void onAutoFlush() {
.add( "1", b -> b.field( "text", "number1" ) );

// An auto flush is performed on query invocation
List<?> resultList = session.createQuery( "select i from IndexedEntity i" )
List<?> resultList = session.createQuery( "select i from IndexedEntity i", IndexedEntity.class )
.setHibernateFlushMode( FlushMode.AUTO )
.getResultList();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

/**
* TestCase for HSEARCH-178 (Search hitting HHH-2763)
Expand All @@ -47,9 +46,6 @@ public void testUpdatingInTransaction() {
busStop.setRoadName( "new road" );
tx.commit();
}
catch (org.hibernate.annotations.common.AssertionFailure ass) {
fail( ass.getMessage() );
}
finally {
fullTextSession.close();
}
Expand All @@ -68,9 +64,6 @@ public void testUpdatingOutOfTransaction() {
busStop.setRoadName( "new road" );
fullTextSession.flush();
}
catch (org.hibernate.annotations.common.AssertionFailure ass) {
fail( ass.getMessage() );
}
finally {
fullTextSession.close();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ private FetchingStrategy createHqlFetchingStrategy(
String hql = customQueryHql;

return (session, lastCheckpointInfo) -> {
Query<?> query = session.createQuery( hql );
Query<?> query = session.createQuery( hql, Object.class );

if ( lastCheckpointInfo != null ) {
query.setFirstResult( lastCheckpointInfo.getProcessedEntityCount() );
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingDisabledIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingDisabledIT.java
index ef59998f6f..e43f3b38e5 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingDisabledIT.java
+++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingDisabledIT.java
@@ -83,7 +83,7 @@ public List<?> setupParams() {

@Test
public void metamodel_onlyUserEntities() {
- assertThat( setupHolder.sessionFactory().getMetamodel().getEntities() )
+ assertThat( setupHolder.sessionFactory().getJpaMetamodel().getEntities() )
.extracting( EntityType::getName )
.containsOnly( IndexedEntity.NAME );
}
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingStrategyPropertyValueIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingStrategyPropertyValueIT.java
index a3d83491fa..7bb088d657 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingStrategyPropertyValueIT.java
+++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/OutboxPollingStrategyPropertyValueIT.java
@@ -101,7 +101,7 @@ public void resetFilter() {

@Test
public void metamodel_userEntitiesAndOutboxEventAndAgent() {
- assertThat( setupHolder.sessionFactory().getMetamodel().getEntities() )
+ assertThat( setupHolder.sessionFactory().getJpaMetamodel().getEntities() )
.<Class<?>>extracting( Type::getJavaType )
.containsExactlyInAnyOrder( IndexedEntity.class, OutboxEvent.class, Agent.class );
}
50 changes: 46 additions & 4 deletions orm6/integrationtest/mapper/orm/ant-src-changes.patch
Original file line number Diff line number Diff line change
@@ -1,3 +1,45 @@
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/dynamicmap/DynamicMapBaseIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/dynamicmap/DynamicMapBaseIT.java
index 52694f380c..adbce15922 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/dynamicmap/DynamicMapBaseIT.java
+++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/dynamicmap/DynamicMapBaseIT.java
@@ -124,7 +124,7 @@ public void simple() {
);

assertThat( query.fetchAllHits() ).containsExactly(
- (Map) session.load( entityTypeName, 1 )
+ (Map) session.getReference( entityTypeName, 1 )
);
} );
}
@@ -184,7 +184,7 @@ public void searchObject() {
);

assertThat( query.fetchAllHits() ).containsExactly(
- session.load( entityTypeName, 1 )
+ session.getReference( entityTypeName, 1 )
);
} );
}
@@ -303,7 +303,7 @@ public void nonEntityIdDocumentId() {
);

assertThat( query.fetchAllHits() ).containsExactly(
- session.load( entityTypeName, 1 )
+ session.getReference( entityTypeName, 1 )
);
} );
}
@@ -390,8 +390,8 @@ public void inheritance() {
);

assertThat( query.fetchAllHits() ).containsExactly(
- (Map) session.load( entityA_BTypeName, 1 ),
- (Map) session.load( entityA_CTypeName, 2 )
+ (Map) session.getReference( entityA_BTypeName, 1 ),
+ (Map) session.getReference( entityA_CTypeName, 2 )
);
} );
}
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/hibernateormapis/ToHibernateOrmScrollableResultsIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/hibernateormapis/ToHibernateOrmScrollableResultsIT.java
index e556ccaf66..3cea4cab56 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/hibernateormapis/ToHibernateOrmScrollableResultsIT.java
Expand Down Expand Up @@ -837,7 +879,7 @@ index c032664bb9..4d205fdccf 100644
.withProperty( AvailableSettings.USE_SECOND_LEVEL_CACHE, "true" )
.withAnnotatedTypes( IndexedEntity.class );
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java
index 1bf135620e..a897a44202 100644
index 1bf135620e..97da0239d0 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java
+++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/BackRefPropertyIT.java
@@ -19,7 +19,7 @@
Expand All @@ -855,7 +897,7 @@ index 1bf135620e..a897a44202 100644
// Check that there actually is a backref:
- MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel();
- assertThat( metamodel.entityPersister( IndexedEntity.class ).getEntityMetamodel().getPropertyNames() )
+ MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel();
+ MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMappingMetamodel();
+ assertThat( metamodel.getEntityDescriptor( IndexedEntity.class ).getEntityMetamodel().getPropertyNames() )
.contains( "_containing_fk_containingidBackref" )
.contains( "_containingIndexBackref" );
Expand Down Expand Up @@ -900,7 +942,7 @@ index d110dbb171..0796b95350 100644

@OneToMany(mappedBy = "genericProperty")
diff --git a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java
index fd7d546f8f..48b93ae1a0 100644
index fd7d546f8f..42625565bc 100644
--- a/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java
+++ b/test/java/org/hibernate/search/integrationtest/mapper/orm/model/SyntheticPropertyIT.java
@@ -19,7 +19,7 @@
Expand All @@ -918,7 +960,7 @@ index fd7d546f8f..48b93ae1a0 100644
// Check that there actually is a synthetic property:
- MetamodelImplementor metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel();
- assertThat( metamodel.entityPersister( ContainedEntity.class ).getEntityMetamodel().getPropertyNames() )
+ MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMetamodel();
+ MappingMetamodel metamodel = sessionFactory.unwrap( SessionFactoryImplementor.class ).getMappingMetamodel();
+ assertThat( metamodel.getEntityDescriptor( ContainedEntity.class ).getEntityMetamodel().getPropertyNames() )
.contains( "_" + IndexedEntity.class.getName().replace( '.', '_' ) + "_contained" );

Expand Down
6 changes: 3 additions & 3 deletions orm6/mapper/orm-batch-jsr352/core/ant-src-changes.patch
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ index c8763c2b4a..2d975eab7e 100644
}

diff --git a/main/java/org/hibernate/search/batch/jsr352/core/massindexing/step/spi/EntityReader.java b/main/java/org/hibernate/search/batch/jsr352/core/massindexing/step/spi/EntityReader.java
index ed05db3af4..a30c55ae41 100644
index 6daddd7182..47a1fe9fcd 100644
--- a/main/java/org/hibernate/search/batch/jsr352/core/massindexing/step/spi/EntityReader.java
+++ b/main/java/org/hibernate/search/batch/jsr352/core/massindexing/step/spi/EntityReader.java
@@ -400,7 +400,7 @@ else if ( lowerBound != null ) {
Expand Down Expand Up @@ -95,7 +95,7 @@ index ed05db3af4..a30c55ae41 100644
}

diff --git a/main/java/org/hibernate/search/batch/jsr352/core/massindexing/util/impl/PersistenceUtil.java b/main/java/org/hibernate/search/batch/jsr352/core/massindexing/util/impl/PersistenceUtil.java
index e7132835a4..377dc213e0 100644
index e7132835a4..e5cdce650e 100644
--- a/main/java/org/hibernate/search/batch/jsr352/core/massindexing/util/impl/PersistenceUtil.java
+++ b/main/java/org/hibernate/search/batch/jsr352/core/massindexing/util/impl/PersistenceUtil.java
@@ -18,7 +18,7 @@
Expand All @@ -112,7 +112,7 @@ index e7132835a4..377dc213e0 100644
SessionFactoryImplementor sessionFactory = entityManagerFactory.unwrap( SessionFactoryImplementor.class );
List<EntityTypeDescriptor> result = new ArrayList<>( types.size() );
- MetamodelImplementor metamodel = sessionFactory.getMetamodel();
+ MappingMetamodel metamodel = sessionFactory.getMetamodel();
+ MappingMetamodel metamodel = sessionFactory.getMappingMetamodel();
for ( Class<?> type : types ) {
result.add( createDescriptor( metamodel, type ) );
}
Expand Down
Loading