EclipseLink 2.5.2 JPA 2.1 ничего не извлекает путем извлечения соединения с внешним ключом ManyToOne

У меня был проект Java EE, разработанный NetBeans 8.0.1 с использованием EclipseLink 2.5.2. JPA 2.1 работает в WebLogic 12c.

Есть две сущности, имеющие отношение многие-к-одному, т.е. одна FirmEntity с несколькими SiteEntity. Сущность отношений как:

@Entity
@Table(name = "site", catalog = "ozssc", schema = "public")
......
@NamedQuery(name = "SiteEntity.findBySiteOwner", query = "SELECT s FROM SiteEntity s left join fetch s.siteOwner where s.siteOwner.firmAbn = :siteOwnerAbn"),
......
public class SiteEntity implements Serializable {
    ......
    @JoinColumn(name = "site_owner", referencedColumnName = "firm_abn", nullable = false)
    @**ManyToOne**(optional = false, fetch = FetchType.EAGER)
    private FirmEntity siteOwner;
    ......
    get......
    set......
    ......
    @Override
    public String **toString**() {
        return "com.longz.ozssc.model.SiteEntity[ siteId=" + siteId + " ]";
    }
}

FirmEntity определяется как:

@Entity
@Table(name = "firm", catalog = "ozssc", schema = "public")
......
public class FirmEntity implements Serializable {
......
@**OneToMany**(cascade = CascadeType.ALL, mappedBy = "siteOwner", fetch = FetchType.LAZY)
private List<SiteEntity> siteEntityList;
......
}

Я определил удаленный интерфейс для удовлетворения моих бизнес-требований:

    List<SiteEntity> findSitesByOwner(String siteOwnerAbn);

Реализуйте это в EJB как:

@Override
public List<SiteEntity> findSitesByOwner(String siteOwnerAbn) {
    Query query = em.createNamedQuery("SiteEntity.findBySiteOwner");
    /*String firmAbn = siteOwner.getFirmAbn();*/
    System.out.println("Site Owner for query by Firm ABN string: |"+siteOwnerAbn+'|');
    query.setParameter("siteOwnerAbn", siteOwnerAbn);

    return new LinkedList<SiteEntity>(query.getResultList());
}

Эта функция принимает строку в качестве параметра и возвращает список SiteEntity. Но, как ни странно, распечатка EJB-контейнера совершенно другая, она распечатывается как:

<Feb 27, 2015 10:37:51 AM EST> <Notice> <Stdout> <BEA-000000> <Site Owner for query by Firm ABN string: |com.longz.ozssc.model.FirmEntity[ firmAbn=61315477824 ]|> 

Обратите внимание: содержимое между двумя разделителями '|' Предлагаемый распечатает строку как " 61315477824 ", это то, что я отправил на интерфейс EJB с моего контроллера Spring MVC. Но контейнер EJB выводится как " com.longz.ozssc.model.FirmEntity [firmAbn = 61315477824] ", и эта строка является функцией SiteEntity.toString(), которая выводится на печать.

Таким образом, я никогда не получаю список сайтов должным образом по этому запросу. Это ошибка EclipseLink или Netbeans? Почему я даю ему строку, но они принимают его как объект сущности? Или что-то не так в моих методах?

Любой совет приветствуется, с большим признательностью.

Редактировать:

Вот как я вызвал EJB с моего контроллера MVC:

@RequestMapping("/indexSiteEntityBySiteOwner")
public ModelAndView listSiteEntitysBySiteOwner(@RequestParam FirmEntity siteOwner) {
    ModelAndView mav = new ModelAndView();
    List<SiteEntity> siteentitys = siteEntityFacadeRemote.findSitesByOwner(siteOwner.getFirmAbn());
    System.out.println("fetched site entity list by site owner: |"+siteentitys.size()+'|');
    mav.addObject("siteentitys", siteentitys);
    mav.setViewName("siteentity/listSiteEntitys.jsp");

    return mav;
}

Метод контроллера принимает FirmEntity в качестве параметра, возвращает MAV. Функция findSitesByOwner была определена в интерфейсе EJB, принимает в качестве параметра String и возвращает список SiteEntity.

Обратите внимание, что я использовал siteOwner.getFirmAbn(), чтобы получить ABN фирмы, он вернет тип ABN строки.

0 ответов

Другие вопросы по тегам