HHH-6189 Binding @Where on entiry level

This commit is contained in:
Hardy Ferentschik 2011-05-04 15:15:29 +02:00
parent e8bd7dfd66
commit e2db59de70
3 changed files with 53 additions and 1 deletions

View File

@ -202,7 +202,7 @@ public class ConfiguredClassHierarchy implements Iterable<ConfiguredClass> {
int count = 0;
for ( ClassInfo info : classes ) {
builder.append( info.name().toString() );
if ( count < classes.size() ) {
if ( count < classes.size() - 1 ) {
builder.append( ", " );
}
count++;

View File

@ -59,6 +59,7 @@ public class EntityBinder {
EntityBinding entityBinding = new EntityBinding();
bindJpaEntityAnnotation( entityBinding );
bindHibernateEntityAnnotation( entityBinding ); // optional hibernate specific @org.hibernate.annotations.Entity
bindWhereFilter( entityBinding );
schemaName = createSchemaName();
bindTable( entityBinding );
@ -70,6 +71,17 @@ public class EntityBinder {
meta.addEntity( entityBinding );
}
private void bindWhereFilter(EntityBinding entityBinding) {
AnnotationInstance whereAnnotation = JandexHelper.getSingleAnnotation(
configuredClass.getClassInfo(), HibernateDotNames.WHERE
);
if ( whereAnnotation != null ) {
// no null check needed, it is a required attribute
String clause = whereAnnotation.value( "clause" ).asString();
entityBinding.setWhereFilter( clause );
}
}
private Schema.Name createSchemaName() {
String schema = null;
String catalog = null;

View File

@ -0,0 +1,40 @@
package org.hibernate.metamodel.binding;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.junit.Test;
import org.hibernate.annotations.Where;
import org.hibernate.metamodel.MetadataSources;
import org.hibernate.metamodel.source.internal.MetadataImpl;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import static junit.framework.Assert.assertEquals;
/**
* @author Hardy Ferentschik
*/
public class MiscAnnotationBindingTest extends BaseUnitTestCase {
@Test
public void testWhereFilter() {
MetadataSources sources = new MetadataSources( new ServiceRegistryBuilder().buildServiceRegistry() );
sources.addAnnotatedClass( Foo.class );
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
EntityBinding binding = metadata.getEntityBinding( MiscAnnotationBindingTest.class.getSimpleName() + "$" + Foo.class.getSimpleName() );
assertEquals( "Wrong where filter", "1=1", binding.getWhereFilter() );
}
@Entity
@Where(clause = "1=1")
class Foo {
@Id
private long id;
}
}