我的spring mvc app中的控制器为concepts
实体提供了一个空的DrugWord
集合,当数据库中DrugConcept
为每DrugWord
个concepts
时。如何更改我的代码,以便为每个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个查询结果,如下所示:
答案 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进行排序,这会导致很多麻烦。
希望这会有所帮助;)