@MappedSuperclass в библиотеке с полем Аннотация. Привязать конкретный Impl к абстрактному полю - PullRequest
0 голосов
/ 31 мая 2019

В моем проекте есть следующий сценарий:

Код библиотеки:

@MappedSuperclass
public abstract class AbstractMultiProductTable extends AbstractTable {

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "product_id", nullable = false, updatable = false)
private AbstractProductTable product;

// getter and setters for product
}

@MappedSuperclass
public abstract AbstractProductTable extends AbstractTable {
}

Код приложения (с использованием библиотеки)

@Entity
@Table("product")
public class Product extends AbstractProductTable {

}

@Entity
@Table("order")
public class Order extends AbstractMultiProductTable {

}

Мы используем Hibernate с Spring JPA.Hibernate жалуется на то, что AbstractProductEntity следует заменить на конкретную реализацию в AbstractMultiProductTable, что ожидается.

Я пробовал следующий сценарий, который работает, но хочу более элегантный и менее изменяющий код подход

Подход, который работает:

Код библиотеки:

@MappedSuperclass
public abstract class AbstractMultiProductTable<T extends AbstractProductTable> extends AbstractTable {

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "product_id", nullable = false, updatable = false)
private T product;

// getter and setters for product
}

Код приложения (с использованием библиотеки)

@Entity
@Table("order")
public class Order extends AbstractMultiProductTable<Product> {

}

Это включает добавление типа Product для каждой сущностиэто расширяется AbstractMultiProductTable.Любые предложения о подходе или способах, которыми модели могут быть?Проблема здесь в том, что код библиотеки не будет знать о конкретной реализации приложения для привязки.Либо приложение должно предоставлять тип, либо может быть способ изменить привязку при запуске приложения.не уверен ...:)

Также пробовал, комбинацию hbm и annotation.но не смог заставить его работать.

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