Список JPA или Play Framework из запроса, объединяющего 2 таблицы - PullRequest
0 голосов
/ 03 июля 2011

В основном я работаю с JSF, поэтому я совершенно новичок в этой теме аннотаций

Если кто-то может помочь

Я хочу список из этого запроса

SELECT  f.CODE  ,f.NAME || '-' || e.NAME  
FROM FS.ELIGIBLE e  RIGHT
OUTER JOIN FS.FINANCIAL_SUPPORT f ON e.CODE = f.CODE ; 

Запросвыше извлекает список из 2 таблиц и объединяет поле имени из обеих таблиц !!

Как я могу сделать это в JPA или в игре с другим запросом, поддерживаемым Play Framework ???

Ответы [ 2 ]

0 голосов
/ 19 августа 2013

JPA - это не система реляционных баз данных, в которой вы можете выполнять запросы, такие как соединение, левое соединение или внешние соединения, это технология отображения объектов.Вы также можете сделать тот же выбор, точно так же, как эти аналоги СУБД, но с другим подходом.

Что вам нужно сделать, это сделать объект, а затем связать ваш второй объект с вашим первым объектом, что является правильным способом связать2 или более объектов.Объекты, о которых я говорю, это твой Стол.См. Мой пример ниже:

  1. Table1: Items.java
  2. ...
  3. // выполните импорт здесь ...
  4. // делать здесь свои аннотации, такие как
  5. @ Entity
  6. @ Table (name = "Items")
  7. открытый класс Items реализует Serializable {
  8. private String id;
  9. private String itemno;
  10. private String описание;
  11. private Set vendors;// это вторая таблица (отношение 1: n)
  12. ...
  13. // не забудьте ваш конструктор
  14. // в вашем установщике и получателе дляПоставщики выполняют следующие действия:
  15. @OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  16. @JoinColumn (name = "id")
  17. общедоступный набор getVendors () {
  18. вернуть поставщиков;
  19. }
  20. public void setVendors (Set vendors) {
  21. this.vendors = vendors;
  22. }
  23. ...
  24. }

Table2: Vendors.java

  1. @ Entity
  2. @ Table (name = "Vendors")
  3. открытый класс Vendors реализует Serializable {
  4. private long id;
  5. private String company;
  6. частный строковый контакт;
  7. private String sequence;
  8. ...
  9. public Vendors () {}
  10. ...
  11. // в вашемsetter & getter
  12. @Id
  13. public long getId () {
  14. return id;
  15. }
  16. public void setId (longid) {
  17. this.id = id;
  18. }
  19. ...
  20. }

Теперь на вашемзапрос, просто сделать обычный выбор, как в ff:

  1. public void makeQuery (String seq) {
  2. EntityManagerFactory emf = Persistence.createEntityManagerFactory (...);
  3. EntityManager em = emf.createEntityManager ();
  4. TypedQuery query = em.createQuery ("ВЫБЕРИТЕ i, j.contact, j.company, j.sequence ИЗ элементов i, ВЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ i.vendors j ГДЕ i.vendors.sequence =: seq
  5. ORDER BY i.id ", Items.class);
  6. Список items = query.setParameter (" sequence ",seq) .getResultList ();
  7. ...
  8. }

Теперь вы можете обратиться кваши 2-ые поставщики таблиц с помощью items.vendors.company ... и т. д.

Один из недостатков этого метода заключается в том, что JPA создает связанные объекты в виде Set, см.объявление в Таблице 1 (Предметы) - частный набор поставщиков.Поскольку это был Набор, последовательность не в том порядке, в котором она была получена, в отличие от использования Списка.

Надеюсь, это поможет ...

С уважением, Нельсон Деограций

0 голосов
/ 06 июля 2011

Ознакомьтесь с документацией Play Framework , в частности с информацией о JPA и вашей доменной модели .

. Вы можете получить доступ к менеджеру объектов в любое время,Вызов

EntityManager entityManager = JPA.em();

С помощью этого вы можете создать любой запрос, даже «Собственный» запрос.Например:

List<Object> results = JPA.em().createNativeQuery(
    "SELECT  f.CODE  ,f.NAME || '-' || e.NAME "+
    "FROM FS.ELIGIBLE e  RIGHT "+
    "OUTER JOIN FS.FINANCIAL_SUPPORT f ON e.CODE = f.CODE").getResultList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...