Skip to content

Commit f975bbc

Browse files
committed
Test use of custom Hibernate id generators in native image
1 parent 8fe7001 commit f975bbc

11 files changed

+174
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.Id;
6+
7+
import org.hibernate.annotations.GenericGenerator;
8+
9+
@Entity
10+
public class EntityWithCustomGenericGeneratorReferencedAsClass {
11+
@Id
12+
@GeneratedValue(generator = "referenced-as-class")
13+
@GenericGenerator(name = "referenced-as-class", type = MyCustomGenericGeneratorReferencedAsClass.class)
14+
public String id;
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.Id;
6+
7+
import org.hibernate.annotations.GenericGenerator;
8+
9+
@Entity
10+
public class EntityWithCustomGenericGeneratorReferencedAsClassName {
11+
@Id
12+
@GeneratedValue(generator = "referenced-as-class-name")
13+
@GenericGenerator(name = "referenced-as-class-name", strategy = "io.quarkus.it.jpa.generatedvalue.MyCustomGenericGeneratorReferencedAsClassName")
14+
public String id;
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.Id;
6+
7+
@Entity
8+
public class EntityWithCustomIdGeneratorType {
9+
@Id
10+
@GeneratedValue
11+
@MyCustomIdGeneratorAnnotation
12+
public String id;
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.Id;
6+
7+
@Entity
8+
public class EntityWithCustomValueGeneratorType {
9+
@Id
10+
@GeneratedValue
11+
public Integer id;
12+
13+
@MyCustomValueGeneratorAnnotation
14+
public String customGenerated;
15+
}

integration-tests/jpa/src/main/java/io/quarkus/it/jpa/generatedvalue/GeneratedValueResource.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,30 @@ public String test() throws Exception {
4343
e -> assertThat(e.generated).isNotNull(),
4444
e -> assertThat(e.generatedColumn).isNotNull());
4545

46+
var entity2 = new EntityWithCustomIdGeneratorType();
47+
assertThat(entity2.id).isNull();
48+
em.persist(entity2);
49+
em.flush();
50+
assertThat(entity2.id).isEqualTo(MyCustomIdGenerator.STUB_VALUE);
51+
52+
var entity3 = new EntityWithCustomValueGeneratorType();
53+
assertThat(entity3.customGenerated).isNull();
54+
em.persist(entity3);
55+
em.flush();
56+
assertThat(entity3.customGenerated).isEqualTo(MyCustomValueGenerator.STUB_VALUE);
57+
58+
var entity4 = new EntityWithCustomGenericGeneratorReferencedAsClass();
59+
assertThat(entity4.id).isNull();
60+
em.persist(entity4);
61+
em.flush();
62+
assertThat(entity4.id).isEqualTo(MyCustomGenericGeneratorReferencedAsClass.STUB_VALUE);
63+
64+
var entity5 = new EntityWithCustomGenericGeneratorReferencedAsClassName();
65+
assertThat(entity5.id).isNull();
66+
em.persist(entity5);
67+
em.flush();
68+
assertThat(entity5.id).isEqualTo(MyCustomGenericGeneratorReferencedAsClassName.STUB_VALUE);
69+
4670
return "OK";
4771
}
4872
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
4+
import org.hibernate.id.IdentifierGenerator;
5+
6+
public class MyCustomGenericGeneratorReferencedAsClass implements IdentifierGenerator {
7+
public static String STUB_VALUE = MyCustomGenericGeneratorReferencedAsClass.class.getName() + "_STUB_VALUE";
8+
9+
@Override
10+
public Object generate(SharedSessionContractImplementor session, Object object) {
11+
return STUB_VALUE;
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
4+
import org.hibernate.id.IdentifierGenerator;
5+
6+
public class MyCustomGenericGeneratorReferencedAsClassName implements IdentifierGenerator {
7+
public static String STUB_VALUE = MyCustomGenericGeneratorReferencedAsClassName.class.getName() + "_STUB_VALUE";
8+
9+
@Override
10+
public Object generate(SharedSessionContractImplementor session, Object object) {
11+
return STUB_VALUE;
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
4+
import org.hibernate.id.IdentifierGenerator;
5+
6+
public class MyCustomIdGenerator implements IdentifierGenerator {
7+
public static String STUB_VALUE = MyCustomIdGenerator.class.getName() + "_STUB_VALUE";
8+
9+
@Override
10+
public Object generate(SharedSessionContractImplementor session, Object object) {
11+
return STUB_VALUE;
12+
}
13+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import static java.lang.annotation.ElementType.FIELD;
4+
import static java.lang.annotation.ElementType.METHOD;
5+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
6+
7+
import java.lang.annotation.Retention;
8+
import java.lang.annotation.Target;
9+
10+
import org.hibernate.annotations.IdGeneratorType;
11+
12+
@IdGeneratorType(MyCustomIdGenerator.class)
13+
@Retention(RUNTIME)
14+
@Target({ FIELD, METHOD })
15+
public @interface MyCustomIdGeneratorAnnotation {
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.quarkus.it.jpa.generatedvalue;
2+
3+
import java.util.EnumSet;
4+
5+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
6+
import org.hibernate.generator.BeforeExecutionGenerator;
7+
import org.hibernate.generator.EventType;
8+
9+
public class MyCustomValueGenerator implements BeforeExecutionGenerator {
10+
public static String STUB_VALUE = MyCustomValueGenerator.class.getName() + "_STUB_VALUE";
11+
12+
@Override
13+
public Object generate(SharedSessionContractImplementor session, Object owner, Object currentValue, EventType eventType) {
14+
return STUB_VALUE;
15+
}
16+
17+
@Override
18+
public EnumSet<EventType> getEventTypes() {
19+
return EnumSet.of(EventType.INSERT, EventType.UPDATE);
20+
}
21+
}

0 commit comments

Comments
 (0)