应该填充的空集合

时间:2014-03-24 22:45:12

标签: java spring hibernate spring-mvc jpa

我的spring mvc app中的控制器为concepts实体提供了一个空的DrugWord集合,当数据库中DrugConcept为每DrugWordconcepts时。如何更改我的代码,以便为每个DrugConcept实例使用适当数量的DrugWord实例填充@SuppressWarnings("unchecked") public DrugWord findDrugWord(String wrd) { System.out.println("..... wrd is: "+wrd); return (DrugWord) em.find(DrugWord.class, wrd); } 集合?

以下是查询数据库的JPA代码:

sel_word.getConcepts().size()

以下是相关控制器方法的代码,当大小至少为1时,该方法打印出0 @RequestMapping(value = "/medications", method = RequestMethod.GET) public String processFindForm(@RequestParam(value="wordId", required=false) String word, Patient patient, BindingResult result, Map<String, Object> model) { Collection<DrugWord> results = this.clinicService.findDrugWordByName(""); System.out.println("........... word is: "+word); if(word==null){word="abacavir";} model.put("words", results); DrugWord sel_word = this.clinicService.findDrugWord(word); System.out.println(";;;; sel_word.concepts.size(), sel_word.getName() are: "+sel_word.getConcepts().size()+", "+sel_word.getName()); model.put("sel_word", sel_word); return "medications/medsList"; } 的大小:

DrugWord

我只有GET编程的问题吗?如果我有一个PUT方法,问题会解决吗?如果是这样,PUT方法需要看起来像什么?

注意:为了简化此帖子,我已将一些相关代码上传到文件共享网站。您可以点击以下链接查看代码:
DrugConcept实体的代码为at this link DrugAtom实体的代码为at this link {{1}}实体的代码为at this link 在MySQL中创建基础数据表的代码是at this link 填充基础数据表is at this link的代码 其中一个表格is at this link的数据 第二个表中的一些代表性数据是at this link。(这只是表中的10,000条记录,可能有100,000行。)
第三个表is at this link的数据。 (这是一个大文件,可能需要一些时间来加载。)
可以读取持久性xml文件at this link

为了帮助人们可视化基础数据,我将包含一个打印屏幕,其中显示了基础表中数据的前2个查询结果,如下所示:

2 个答案:

答案 0 :(得分:1)

问题似乎是数据库已损坏,特别是每个单词中都有新的行字符,因此查询总是返回空结果。除了存在一些问题,从DB加载了非常大的实体图,触发了大量的SQL查询。

答案 1 :(得分:0)

首先你可以将findDrugWord方法更改为:

public DrugWord findDrugWord(String wrd) { 
    em.find(DrugWord.class, wrd); 
}

因为单词是PK,并且当你将@ManyToMany放在那里时,你已经设置了提取。 我可以想象重复的提取定义会让您的JPA提供商感到困惑,但它肯定无法帮助它。 :)

其次,请看一下这一行:

PropertyComparator.sort(sortedConcepts, new MutableSortDefinition("concept", true, true));

我在concept实体中看不到DrugConcept属性。你不想写rxcui吗? 但是如果你真的希望每次都对它进行排序,请添加@OrderBy("rxcui ASC")。 我不会做任何代替实体的收藏。特别是没有正确覆盖hashCode和equals:你不能确定Spring如何在后台使用反射来对你的Collection进行排序,这会导致很多麻烦。

希望这会有所帮助;)