HHH-18414 Add test for issue
This commit is contained in:
parent
b5a5869b9b
commit
a1a4446f09
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* 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.orm.test.mapping.attributebinder;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.AttributeBinderType;
|
||||||
|
|
||||||
|
import static java.lang.annotation.ElementType.FIELD;
|
||||||
|
import static java.lang.annotation.ElementType.METHOD;
|
||||||
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dummy annotation to verify binders are called only once.
|
||||||
|
*
|
||||||
|
* @author Yanming Zhou
|
||||||
|
*/
|
||||||
|
@Target({METHOD,FIELD})
|
||||||
|
@Retention(RUNTIME)
|
||||||
|
@AttributeBinderType( binder = FooBinder.class )
|
||||||
|
public @interface Foo {
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* 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.orm.test.mapping.attributebinder;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import org.hibernate.binder.AttributeBinder;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
import org.hibernate.mapping.Property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The binder to verify binders are called only once.
|
||||||
|
*
|
||||||
|
* @author Yanming Zhou
|
||||||
|
*/
|
||||||
|
public class FooBinder implements AttributeBinder<Foo> {
|
||||||
|
|
||||||
|
private static final Map<String, Foo> map = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void bind(
|
||||||
|
Foo annotation,
|
||||||
|
MetadataBuildingContext buildingContext,
|
||||||
|
PersistentClass persistentClass,
|
||||||
|
Property property) {
|
||||||
|
String key = persistentClass.getClassName() + "." + property.getName();
|
||||||
|
Foo existing = map.putIfAbsent( key, annotation );
|
||||||
|
if ( existing == annotation ) {
|
||||||
|
throw new IllegalStateException( "AttributeBinder is called twice" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ public class System {
|
||||||
@Basic
|
@Basic
|
||||||
public String name;
|
public String name;
|
||||||
@YesNo
|
@YesNo
|
||||||
|
@Foo
|
||||||
public boolean active;
|
public boolean active;
|
||||||
|
|
||||||
private System() {
|
private System() {
|
||||||
|
|
Loading…
Reference in New Issue