Сопоставление общих сущностей JPA - PullRequest
0 голосов
/ 05 августа 2011

У меня есть сценарий, в котором у меня есть объект с именем Page, а другой объект с именем Tag, связь между этими двумя именами - Page, имеет теги (многие ко многим), но те же теги могут также использоваться совместно с продуктом, здесь также это отношение В этом же продукте есть теги (многие ко многим).

В обычном сценарии я создам столбец типа в теге, где типом может быть значение Enum (product, page), и использую запрос, подобный SELECT * из тегов, где parent_id = page_id и type = page.

Как это сделать в JPA (как создать это отношение и как запрашивать данные)

1 Ответ

0 голосов
/ 05 августа 2011

Я думаю, вы должны создать две таблицы ассоциаций. Один, чтобы связать Страницы с тегами, другой, чтобы связать Продукты с тегами. Код:

@Entity
@Table(name = "page")
class Page {
  ....

    @OneToMany
    @JoinTable(name = "jnd_pages_tags", joinColumns = @JoinColumn(name = "page_fk"),
            inverseJoinColumns = @JoinColumn(name = "tag_fk"))
    private Set<Tag> tags;      
}

@Entity
@Table(name = "page")
class Product {
  ....

    @OneToMany
    @JoinTable(name = "jnd_products_tags", joinColumns = @JoinColumn(name = "products_fk"),
            inverseJoinColumns = @JoinColumn(name = "tag_fk"))
    private Set<Tag> tags;      
}

@Entity
@Table(name = "tags")
class Tag {
.....
}

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

SELECT p.t FROM Page p WHERE p.id = :id

, чтобы выбрать соответствующие теги для продукта, используйте

SELECT p.t FROM Product p WHERE p.id = :id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...