Как написать JpaRepository для таблиц, который имеет составные ключи - PullRequest
0 голосов
/ 26 июня 2018

Пожалуйста, обратитесь к приложенному скриншоту, чтобы понять структуру таблицы.

enter image description here

Empd_Id - это первичный ключ в таблице «Сотрудник», который в свою очередь становитсячасть составного ключа вместе с «product_id» в таблице под названием «product».Любой сотрудник может иметь несколько продуктов, поэтому в этом случае между таблицами «Сотрудник-Продукт» возникает отношение «один ко многим».Теперь я запутался, нужно ли мне писать только 1 интерфейс JpaRepository, т. Е. Для сотрудника, или 2 интерфейса JpaRepository (1 для сотрудника и один для продукта).Я чувствую, что это всего лишь 1 интерфейс для таблицы Employee, но как ???

Ниже приведен мой фрагмент кода: - 1-й интерфейс репозитория JPA

public interface MyRepository extends JpaRepository<Product, EmpProd> {
}

Объект: -

@Entity
@Table(name="product")
public class Product{

    @EmbeddedId
    private EmpProd empProd;

    @Column(name="product_name")
    private String commerceUserId;

    @Column(name="description")
    private String description;

Для составных ключей: -

@Embeddable
public class EmpProd implements Serializable{

    private static final long serialVersionUID = 1L;

    @NotNull
    @Column(name="emp_id")
    private String empId;

    @NotNull
    @Column(name="product_id")
    private String productId;

2-й интерфейс репозитория Jpa

public interface MyMainDataRepository extends JpaRepository<Employee, String> {
}

Класс сущности: -

@Entity
@Table(name="employee")
public class Employee{

    @Id
    @NotNull
    @Column(name="emp_id")
    private String empId;

    @Column(name="first_name")
    private String firstName;

Хотя я написал 2 отдельныхРепозитории JPA, я твердо верю, что понадобится всего 1, основной, то есть

открытый интерфейс MyMainDataRepository расширяет JpaRepository {}

Но я не знаю, как связаны оба класса сущностей и выборочные данныеот использования одного репозитория Jpa, поскольку я новичок в Spring Data JPA.Я был бы очень признателен, если бы кто-нибудь мог помочь мне здесь.Спасибо

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если вы хотите получить данные о сотруднике, вам нужен следующий интерфейс,

public interface MyMainDataRepository extends JpaRepository<Employee, String> {
}

Если вы хотите получить информацию о продукте, вам нужен следующий интерфейс,

public interface MyRepository extends JpaRepository<Product, EmpProd> {
}

Сотрудник связан с таблицей продуктов, итерация происходит через продукта и связанных сотрудников.Исходя из этого, вы не можете получить прямой доступ к таблице сотрудников и получить результаты сотрудников из интерфейса MyRepository.

0 голосов
/ 26 июня 2018

Две сущности Product и Employee не имеют никакого отношения к JPA.Поэтому вы не можете получить доступ к обоим через один репозиторий.

Если, например, Product будет иметь фактическую ссылку на Employee, вы можете использовать ProductRepository для загрузки Product s и навигацииоттуда к ссылочным Employee s.

Но даже если это возможно, я бы предположил, что Product и Employee должны рассматриваться как разные агрегаты и, следовательно, должны иметь свой собственный репозиторий каждый,См. Предполагается, что у вас есть один репозиторий на таблицу в JPA? для получения дополнительной информации по этому вопросу.

Учитывая сущности, ваши репозитории выглядят просто отлично.Обратите внимание, что сущности выглядят нетипично из-за использования String productId вместо Product product.

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