/*
* Hibernate Search, full-text search for your domain model
*
* 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.search.test.embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.cfg.spi.SearchConfiguration;
import org.hibernate.search.engine.impl.ConfigContext;
import org.hibernate.search.engine.metadata.impl.AnnotationMetadataProvider;
import org.hibernate.search.engine.metadata.impl.EmbeddedTypeMetadata;
import org.hibernate.search.engine.metadata.impl.PropertyMetadata;
import org.hibernate.search.engine.metadata.impl.TypeMetadata;
import org.hibernate.search.indexes.spi.LuceneEmbeddedIndexManagerType;
import org.hibernate.search.test.util.HibernateManualConfiguration;
import org.hibernate.search.testsupport.TestForIssue;
import org.hibernate.search.testsupport.setup.BuildContextForTest;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* @author Hardy Ferentschik
*/
@TestForIssue(jiraKey = "HSEARCH-1494")
public class EmbeddedObjectIdInclusionTest {
private AnnotationMetadataProvider metadataProvider;
@Before
public void setUp() {
SearchConfiguration searchConfiguration = new HibernateManualConfiguration();
ConfigContext configContext = new ConfigContext(
searchConfiguration,
new BuildContextForTest( searchConfiguration )
);
metadataProvider = new AnnotationMetadataProvider( new JavaReflectionManager(), configContext );
}
@Test
public void testIncludeEmbeddedObjectId() {
TypeMetadata typeMetadata = metadataProvider.getTypeMetadataFor( A1.class, LuceneEmbeddedIndexManagerType.INSTANCE );
assertTrue(
"There should be only one embedded metadata instance",
typeMetadata.getEmbeddedTypeMetadata().size() == 1
);
EmbeddedTypeMetadata embeddedTypeMetadata = typeMetadata.getEmbeddedTypeMetadata().iterator().next();
PropertyMetadata propertyMetadata = embeddedTypeMetadata.getPropertyMetadataForProperty( "id" );
assertNotNull( "The id property should have been included", propertyMetadata );
}
@Test
public void testExcludeEmbeddedObjectId() {
TypeMetadata typeMetadata = metadataProvider.getTypeMetadataFor( A2.class, LuceneEmbeddedIndexManagerType.INSTANCE );
assertTrue(
"There should be only one embedded metadata instance",
typeMetadata.getEmbeddedTypeMetadata().size() == 1
);
EmbeddedTypeMetadata embeddedTypeMetadata = typeMetadata.getEmbeddedTypeMetadata().iterator().next( );
PropertyMetadata propertyMetadata = embeddedTypeMetadata.getPropertyMetadataForProperty( "id" );
assertNull( "The id property should not have been included", propertyMetadata );
}
@Entity
@Indexed
public class A1 {
@Id
@GeneratedValue
private long id;
@OneToOne
@IndexedEmbedded(includeEmbeddedObjectId = true)
private B b;
}
@Entity
@Indexed
public class A2 {
@Id
@GeneratedValue
private long id;
@OneToOne
@IndexedEmbedded(includeEmbeddedObjectId = false)
private B b;
}
@Entity
public class B {
@Id
@GeneratedValue
private long id;
}
}