У меня есть следующая структура:
@MappedSuperclass
public abstract class Action {
...
}
И чем несколько сущностей, расширяющих Action, например:
@Entity(name="chemistry")
public class Chemistry extends Action implements Serializable {
...
}
Чтобы выполнить персистентность, я использовал JPARepository:
@NoRepositoryBean
public interface ActionRepository<T extends Action> extends JpaRepository<T, String> {
...
}
И интерфейс для детей:
@Component
@Service
@Repository
interface ChemistryRepository extends ActionRepository<Chemistry> {
}
Механизм персистентности отлично работает для всех сущностей, унаследованных от Action. Теперь у меня проблема. У меня есть другая таблица в БД, называемая action_params, включающая дополнительные параметры ключ-значение, которые относятся к конкретному действию c (т.е. химии). У меня есть соответствующая сущность:
@Entity(name="action_params")
public class ActionParams implements Serializable {
...
}
В БД я не могу использовать внешний ключ, поскольку ключ не связан с конкретной таблицей c, но любая таблица наследуется от Action. это нормально, я хотел бы использовать запрос, чтобы получить для каждого действия записи из таблицы action_params на основе его идентификатора.
И я хотел бы добавить Список к действию, отображая эти записи в виде списка. Я пытался использовать hibernate, но любой запрос возвращает пустой (следующий код был добавлен в класс Action):
@OneToMany
@JoinFormula(value="select p from action_params p where p.action_id = id")
@Transient
protected List<ActionParams> actionParamsList;
Это не работает. Я также попытался автоматически связать ActionParamsRepository в Action, но, конечно, нет никакого способа сделать это, и я не мог придумать другого пути.
Ваш совет будет высоко ценится