/*
* 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.property;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import org.hibernate.MappingException;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.testing.TestForIssue;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
/**
* Originally written to verify fix for HHH-10172
*
* @author Steve Ebersole
*/
public class GetAndIsVariantGetterTest {
private static StandardServiceRegistry ssr;
@BeforeClass
public static void prepare() {
ssr = new StandardServiceRegistryBuilder( ).build();
}
@AfterClass
public static void release() {
if ( ssr != null ) {
StandardServiceRegistryBuilder.destroy( ssr );
}
}
@Test
@TestForIssue( jiraKey = "HHH-10172" )
public void testHbmXml() {
try {
new MetadataSources( ssr )
.addResource( "org/hibernate/property/TheEntity.hbm.xml" )
.buildMetadata();
fail( "Expecting a failure" );
}
catch (MappingException e) {
assertThat( e.getMessage(), startsWith( "In trying to locate getter for property [id]" ) );
}
}
@Test
@TestForIssue( jiraKey = "HHH-10172" )
public void testAnnotations() {
try {
new MetadataSources( ssr )
.addAnnotatedClass( TheEntity.class )
.buildMetadata();
fail( "Expecting a failure" );
}
catch (MappingException e) {
assertThat( e.getMessage(), startsWith( "HHH000474: Ambiguous persistent property methods detected on" ) );
}
}
@Test
@TestForIssue( jiraKey = "HHH-10242" )
public void testAnnotationsCorrected() {
Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( TheEntity2.class )
.buildMetadata();
assertNotNull( metadata.getEntityBinding( TheEntity2.class.getName() ).getIdentifier() );
assertNotNull( metadata.getEntityBinding( TheEntity2.class.getName() ).getIdentifierProperty() );
}
@Test
@TestForIssue( jiraKey = "HHH-10309" )
public void testAnnotationsFieldAccess() {
// this one should be ok because the AccessType is FIELD
Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( AnotherEntity.class )
.buildMetadata();
assertNotNull( metadata.getEntityBinding( AnotherEntity.class.getName() ).getIdentifier() );
assertNotNull( metadata.getEntityBinding( AnotherEntity.class.getName() ).getIdentifierProperty() );
}
@Entity
public static class TheEntity {
private Integer id;
public boolean isId() {
return false;
}
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
@Entity
public static class TheEntity2 {
private Integer id;
@Transient
public boolean isId() {
return false;
}
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
@Entity
@Access(AccessType.PROPERTY)
public static class AnotherEntity {
@Id
@Access(AccessType.FIELD)
private Integer id;
public boolean isId() {
return false;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
}