在JPA中获取具有惰性关系的集合

时间:2014-03-17 19:08:36

标签: jpa eclipselink criteria

我正在使用EclipseLink 2.3.2提供的JPA。我在MySQL数据库中有三个常用的表。表是,

  • 国家
  • state_table
  • 城市

我希望没有必要提及表关系的任何内容 - 按照这里提到的顺序进行一对多。


我从cityList<City>获取一个列表,如下所示。

Join<City, StateTable> join=null;
Join<StateTable, Country> join1=null;
CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<City>criteriaQuery=criteriaBuilder.createQuery(City.class);

Metamodel metamodel=entityManager.getMetamodel();
EntityType<City> entityType = metamodel.entity(City.class);
Root<City> root = criteriaQuery.from(entityType);
root.fetch(City_.stateTable, JoinType.INNER).fetch(StateTable_.country, JoinType.INNER);

TypedQuery<City> typedQuery = entityManager.createQuery(criteriaQuery);
List<City> cityList = typedQuery.getResultList();

在JSF的某个地方,我需要通过以下方式访问Set<StateTable>

for(City city:cityList)
{
    Set<StateTable> stateTables = city.getStateTable().getCountry().getStateTableSet();

    for(StateTable state:stateTables)
    {
        System.out.println(state.getStateId()+" : "+state.getStateName());
    }
}

当添加新国家/地区和新州时,此city.getStateTable().getCountry().getStateTableSet()会导致问题。在重新部署应用程序之前,不会列出新创建的状态(和国家/地区)。

获取类型是懒惰的。 如果获取类型变为急切但这不是一个合理的解决方案,这将有效。

有没有办法让Set<StateTable>获得可以添加的新状态?

0 个答案:

没有答案