调用findAll()时,找到了多个具有给定标识符的行,但如果我使用findById()遍历所有条目,则该行有效



嗯。。。我有一个通过hibernate自动生成的数据库,当我试图在控制器中调用findAll((时,我会收到

找到了多个具有给定标识符的行:1,用于类:com.example.rentacar.domain.Masina

无论如何,我检查了数据库,没有重复的密钥。这是控制器:

@Controller
public class MasinaController {
MasinaService masinaService;
@Autowired
public MasinaController (MasinaService masinaService){
this.masinaService = masinaService;
}
@RequestMapping("/masini")
public String getMasini(Model model){
var masini = masinaService.findMasini();
model.addAttribute("masini", masini);
return "masini";
}
}

服务:

@Autowired
public MasinaServiceImpl(MasinaRepo masinaRepo) {
this.masinaRepo = masinaRepo;
}
public List<Masina> findMasini(){
var masini =  masinaRepo.findAll();
return masini;
}

这是域:

@Entity
@Data
public class Masina {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String model;
private Integer capacitateCilindrica;
private Integer putere;
private Integer anProductie;
private String culoare;
private String numarInmatriculare;
private Float pret;
private Boolean esteInchiriata;
@OneToOne(mappedBy = "masina")
private ChirieActiva ChirieActiva;
@OneToMany(mappedBy = "masina")
private List<ChirieFinalizata> ChiriiFinalizate;
@OneToOne
private Firma Firma;
@ManyToMany(mappedBy = "Masini",
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<Categorie> CategoriiMasina;
}

链接的对象的其余部分为空(没有条目(。我试图查看哪个标识符已损坏,所以我遍历所有条目,看看哪个id会给我返回错误。在完全迭代之后,没有一个条目返回错误。。最有趣的部分是,如果我在控制器中添加这段代码(在调用findAll之前,使用findById迭代数据库中的所有条目(,它会起作用所以。。我的控制器看起来是这样的。。。

@RequestMapping("/masini")
public String getMasini(Model model){
for(int i=1; i<9;i++){
var masina = masinaService.findById(i);
}
var masini = masinaService.findMasini();
model.addAttribute("masini", masini);
return "masini";
}

有人知道为什么会这样吗?非常感谢!

我通过向@OneToOne关系添加(fetch=FetchType.LAZY(解决了这个问题。

最新更新