Spring Framework JpaRepository 通过 findAll() 方法返回第一行的重复项

Posted

技术标签:

【中文标题】Spring Framework JpaRepository 通过 findAll() 方法返回第一行的重复项【英文标题】:Spring Framework JpaRepository returns duplicates of first table row by findAll() method 【发布时间】:2016-10-12 22:18:47 【问题描述】:

这是我的 JpaRepository

public interface ProcessorRepository extends JpaRepository<Processor, Integer> 

控制器

...
@Autowired
ProcessorRepository processorRepository;

@RequestMapping("/getAll")
public String showAllProcessors(Map map)

    List<Processor> processorList = processorRepository.findAll();

    map.put("processors", processorList);
    return "main";

ma​​in.jsp

....
<select>
<option selected="selected">Choose Processor</option>
<c:forEach var="proc" items="$processors">
    <option>
            $proc.processorName
    </option>
</c:forEach>
</select>

这是处理器 mysql 表的样子:


但这就是我得到的

为什么它返回第一行的重复,而不是所有不同的行?

【问题讨论】:

这个问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。这通常可以通过在发布之前确定并仔细检查重现问题所需的最短程序来避免。 【参考方案1】:

原来问题出在我的处理器实体中。它有@Column(name="id") 而不是@Column(name="processor_id")。

【讨论】:

首先我的模型中有一个 id 字段,然后我在数据库中更改了它,但我没有在我的代码中更改它。这就是它返回相同重复列表的原因。【参考方案2】:

您可以在repository 中创建custom method 以返回Distinct

List<Processor> findDistinctProcessorsByprocessorName();

在上述方法中,processorName 将作为查找重复项的属性,您可以根据需要更改它。

【讨论】:

以上是关于Spring Framework JpaRepository 通过 findAll() 方法返回第一行的重复项的主要内容,如果未能解决你的问题,请参考以下文章

spring framework Annotation(注解)

Spring Framework Runtime

Design patterns in Spring Framework

手动创建Spring项目 Spring framework

spring,spring framework,spring mvc,spring web flow有啥区别和联系?

Hello Spring Framework——面向切面编程(AOP)