У меня есть два проекта, upstream
и downstream
.upstream
- это зависимость во время компиляции downstream
.
У меня есть класс BaseEntity
в upstream
:
@MappedSuperclass
public abstract class BaseEntity<T extends Serializable> {
public abstract T getId()
...
У меня также есть CustomUUIDGenerator
класс в upstream
:
public class CustomUUIDGenerator extends UUIDGenerator {
@Override
public Serializable Generate(SharedSessionContractImplementor session, Object obj) throws HibernateException {
...
У меня есть производный класс UserType
, JsonbType
, а также в upstream
.
Я добавил эти аннотации к *Файл 1022 * в корневом каталоге upstream
:
@GenericGenerator(name = "UUIDGenerator", strategy="<path>.CustomUUIDGenerator")
@TypeDef(name = "jsonb", typeClass = JsonbType.class)
В downstream
, у меня есть класс TestEntity
:
@Entity
@Table(name = "test")
public class TestEntity extends BaseEntity<UUID> {
@Id
@GeneratedValue(generator = "UUIDGenerator")
private UUID id;
@Type(type = "jsonb")
private TestPojo data;
public static class TestPojo {
String prop1;
String prop2;
<constructors for TestPojo omitted, but they are in my code>
}
<getters and setters omitted>
}
У меня тест в downstream
который пытается сохранить TestEntity
, но когда я запускаю его, я вижу org.hibernate.AnnotationException: Unknown Id.generator: UUIDGenerator
.Если я удаляю параметр generator
из @GeneratedValue
в TestEntity
и запускаю его, я вижу org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [jsonb]
.
Каковы условия для того, чтобы эти аннотации типа определения были доступны для класса?Если я хочу, чтобы @Type(type = "jsonb")
работал для всех объектов в проектах, которые имеют upstream
в качестве зависимости, как бы мне этого добиться?