我正在使用EclipseLink 2.3.2提供的JPA。我在MySQL数据库中有三个常用的表。表是,
我希望没有必要提及表关系的任何内容 - 按照这里提到的顺序进行一对多。
我从city
表List<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>
获得可以添加的新状态?