Spring JpaRepository findAll()方法多次返回同一行

时间:2019-03-31 18:13:22

标签: spring hibernate spring-boot spring-data-jpa

我有一个quizRepository,其中存储了在我的应用中创建的所有测验。 我已经创建了QuizDetails类的存储库,并调用了findAll()的内置JpaRepository方法。

但是我得到的同一个对象多次返回列表。该列表包含的对象数量与表中的行数相同。但是在JPA中,所有对象都是相同的。

模型类:

@Getter
@Setter
@Entity
@Component
@Scope("prototype")
public class QuizDetails {
    @Id
    @Column(name="quiz_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Embedded
    private FormattedQuizBean questions;

    @ManyToOne
    private LoginAttribute quizMaster;

}

存储库接口:

@Repository
public interface QuizDetailRepository extends JpaRepository<QuizDetails, Long>{
}

控制器类:

@GetMapping("/master/all-quiz")
    public String listQuizzesByMaster(ModelMap model, Principal principal){
        List<QuizDetails> quizDetails= quizDetailRepository.findAll();
        log.debug("Quizzes: "+quizDetails.toString());

        return "master/allquiz";
    }

输出:

Quizzes: [com.DevSting.QuizPortal.Model.QuizDetails@19ffa0f0, com.DevSting.QuizPortal.Model.QuizDetails@19ffa0f0, com.DevSting.QuizPortal.Model.QuizDetails@19ffa0f0, com.DevSting.QuizPortal.Model.QuizDetails@19ffa0f0]

从输出中可以看到,即使多次尝试打印单个字段,我也会多次返回同一对象哈希码,因此它多次打印第一行。我数据库中的行数等于创建的相同对象的数。

Database has 4 different rows

1 个答案:

答案 0 :(得分:0)

从您的实体中删除@Component注释。