Невозможно создать объект сопоставления с JPA - PullRequest
1 голос
/ 08 апреля 2020

A. У меня есть сущность EntityA, как показано ниже:

Table - EntityA(id long PK, name varchar)

@Entity @Table
EntityA{
    @Id
    long id;

    String name;
}

B. Исходя из этого, я хочу получить данные в нижнем классе через JPA (используя однонаправленное отображение):

@Entity @Table
EntityMap{

    long id;

    @OneToOne
    EntityA entity;

    @OneToMany
    List<EntityA> mappedEntity;
} 

C. Чтобы заставить его работать сейчас, я создал сущность, как показано ниже:

Table - entity_map(id long pk, source_entity_id long FK-EntityA_id, target_entity_id long FK-EntityA_id)

@Entity @Table
EntityMap{

    @Id
    long id;

    @OneToOne
    @JoinColumn(name = "source_entity_id")
    EntityA sourceEntity;

    @ManyToOne
    @JoinColumn(name = "target_entity_id")
    EntityA targetEntity;
}

Это работает, как и ожидалось, но мне нужна сущность, объясненная в #B. Любое предложение?

1 Ответ

0 голосов
/ 08 апреля 2020

A @OneToMany отношение может быть заархивировано с помощью

@JoinColumn(name = "entity_map_id")
@OneToMany
List<EntityA> mappedEntity;

В вашей таблице EntityA необходим столбец entity_map_id и ограничение foreign key (entity_map_id) references EntityMap(id).

Если вы не можете измените таблицу EntityA, для которой требуется @JoinTable для сопоставления:

@JoinTable(name = "JOIN_TABLE", joinColumns = {@JoinColumn(name = "MY_ENTITY_MAP_FK")}, inverseJoinColumns = {@JoinColumn(name = "ENTITY_A_FK")})
@OneToMany
List<EntityA> mappedEntity;

Таблица объединения содержит два столбца ENTITY_A_FK и MY_ENTITY_MAP_FK:

create table JOIN_TABLE(
  ENTITY_A_FK integer not null,
  MY_ENTITY_MAP_FK integer not null
);
...