В проекте Spring-Boot есть две сущности (полученные из Kafka и), которые сохраняются в базе данных PostgreSQL независимо.
Семантически они имеют один и тот же id
, и я хотел бы объединить таблицы по этому вопросу и получить результаты.
Конечно, я мог бы использовать нативные запросы и т. Д., Но, если это возможно, я бы предпочел более высокоуровневый подход. Может быть, получение результатов объединения в новом типе класса данных, если это имеет смысл?
Вот минимальный пример того, что я имею в виду:
@Entity
@Table(name = "foo")
data class Foo(
@Id
var id: Long,
val fooval: Long
)
@Repository
interface FooRepository : JpaRepository<Foo, Long>
@Entity
@Table(name = "bar")
data class Bar(
@Id
var id: Long,
val barval: Long
)
@Repository
interface BarRepository : JpaRepository<Bar, Long>
CREATE TABLE foo(
id BIGINT PRIMARY KEY NOT NULL,
fooval BIGINT NOT NULL
);
CREATE TABLE bar(
id BIGINT PRIMARY KEY NOT NULL,
barval BIGINT NOT NULL
);
Foo
не владеет Bar
или наоборот. Очистка этих таблиц (удаление сущностей) не является проблемой.
Итак, мое текущее решение для получения результата соединения выглядит так:
@Entity
data class FooBar(
@Id
var id: Long,
val fooval: Long,
val barval: Long
)
@Repository
interface FooBarRepository : JpaRepository<FooBar, Long> {
@Query(
nativeQuery = true,
value = "SELECT foo.id, fooval, barval FROM foo, bar WHERE foo.id = bar.id;"
)
fun fetchAll(): Iterable<FooBar>
}
Но разве это разумный путь?