Как я могу поделиться определениями Hibernate TypeDefs и GenericGenerator между проектами? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть два проекта, 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 в качестве зависимости, как бы мне этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...