Hibernate调用Optional的toString()抛出org.hibernate.HibernateException问题
Hibernate异常与API调试问题
问题1:调用Optional对象toString()抛出HibernateException
使用Hibernate时遇到异常:调用Optional对象的toString()方法时抛出org.hibernate.HibernateException。
具体场景:模型中的Hibernate实体包含一个声明为Optional的属性,通过Hibernate检索该实体实例后,调用该Optional的toString()方法触发异常。此问题在为Client实体添加Logo属性后出现,此前功能正常。
问题2:按阶段返回商机的API无法正确返回商机描述
调试按阶段返回商机的API时,发现商机描述无法正确返回;使用Postman测试该API时收到错误信息。
相关代码
EtapeEntity
package com.example.crm_amosys_orass.model; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; @Entity @Component @AllArgsConstructor @NoArgsConstructor @Data @Table(name = "crm_Opportunite_etape") public class EtapeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idEtape; private String name; // Constructors, getters, and setters @OneToMany(mappedBy = "etape", cascade = CascadeType.ALL, orphanRemoval = true) private List<OpportuniteEntity> opportunite; }
OpportuniteEntity
package com.example.crm_amosys_orass.model; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.HashSet; import java.util.List; import java.util.Set; @Entity @Data @AllArgsConstructor @NoArgsConstructor @Table(name = "crm_opportunities_information") @Builder @Component public class OpportuniteEntity { //Type @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idOpportunity; private String name; // private String stage; private LocalDate closeDate; private String Statu; @ManyToOne @JoinColumn(name = "idUser") private UserEntity user; /*@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "idClient") private ClientEntity client;*/ @ManyToOne @JoinColumn(name="idEtape", nullable = false) private EtapeEntity etape; //@ManyToOne(fetch = FetchType.LAZY) /****** @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name="idEtape") EtapeEntity etape1;*******/ @OneToMany(mappedBy = "opportunite", cascade = CascadeType.ALL, orphanRemoval = true) private List<ProduitOpportuniterEntity> produits; /* @ManyToMany @JoinTable(name = "opportunity_product", joinColumns = @JoinColumn(name = "idOpportunity"), inverseJoinColumns = @JoinColumn(name = "idProduct")) private Set<ProduitEntity> products = new HashSet<>();*/ //********************************************************************************* @ManyToOne @JoinColumn(name = "idClient") private ClientEntity client; }
ClientEntity
package com.example.crm_amosys_orass.model; import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.Date; import java.util.List; @Entity @Component @AllArgsConstructor @NoArgsConstructor @Data @Table(name = "crm_client_information") public class ClientEntity { //Classe Client @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idClient; @Column(name = "Entreprise_Principal") private String entreprisePrincipal; @Column(name = "SiteWeb_Entreprise") private String siteWebEntreprise; @Column(name = "Nom_Prenom") private String nomPrenom; @Column(name = "Code_Client") private String codeClient; @Column(name = "Fax") private String fax; @Column(name = "Tele_Fix") private String teleFixe; @Column(name = "E_mail") private String email; @Column(name ="Linkdin") private String linkdin; @Column(name ="Register_Commercial") private String registerCommercial; @Column(name ="Chifre_D'affir") private String chifreDaffir; @Column(name ="nombre_Employe") private String nombreEmploye; @DateTimeFormat(pattern = "yyyy-MM-dd") // Specify the date pattern @Column(name = "Date_creat_Client") private LocalDate dateCreatClient; @DateTimeFormat(pattern = "yyyy-MM-dd") // Specify the date pattern @Column(name = "DateAgrement") private LocalDate dateAgrement; @ManyToOne @JoinColumn(name = "idCountry") private CountryEntity country; @OneToMany(mappedBy = "client") private List<ContactEntity> contacts; // lllllll // @OneToMany // List<ProduitEntity> produits; @DateTimeFormat(pattern = "yyyy-MM-dd") @Temporal(TemporalType.DATE) private Date dateAchatP; @OneToMany(mappedBy = "client") private List<ProduitClientEntity> produits; // @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @OneToMany(mappedBy = "client") private List<OpportuniteEntity> opportunites; @OneToOne @JoinColumn(name = "id") private LogoEntity logo; }
EtapeController(异常API)
@GetMapping("/crm_etape_etapeOpp/{idEtape}") public ResponseEntity<List<OpportunityDTO>> getOpportunite(@PathVariable long idEtape){ return new ResponseEntity<>(etapeService.getOpportunite(idEtape),HttpStatus.OK); }
EtapeService
public List<OpportunityDTO> getOpportunite(long idEtape) { Optional<EtapeEntity> etape = etapeRepository.findById(idEtape); List<OpportuniteEntity> opportunites = etape.get().getOpportunite(); // List<OpportuniteEntity> opportunites1 = etape.get().getOpportunite(); return opportunityMapper.ToOpportuniteDtos(opportunites); }
内容的提问来源于stack exchange,提问作者RAJA BEN BOURCH
相关产品推荐
相关产品推荐

