现在我已经测试了2天,但没有任何效果。
我暗示这些实体具有双向关系。

@Entity
@Table( name = "T_user" )
public class T_user implements Serializable {
   @Id
   @GeneratedValue( strategy = GenerationType.IDENTITY )
   private Long               id_user;

   @OneToOne( targetEntity = T_infosProfile.class, mappedBy = "user", fetch = FetchType.LAZY, orphanRemoval = true )
   private T_infosProfile     infosProfile;

   public void setInfosProfile( T_infosProfile infosProfile ) {
    this.infosProfile = infosProfile;
   }
}




@Entity
@Table( name = "T_infosProfile" )
public class T_infosProfile {

   @Id
   @GeneratedValue( strategy = GenerationType.IDENTITY )
   private Long       id_infos;

   @OneToOne( targetEntity = T_user.class, fetch = FetchType.LAZY )
   @JoinColumn( name = "id_user", unique = true, nullable = false )
   private T_user user;

     @Column( name = "pourcentage_completion", length = 3, updatable = true, unique = false )
     private Integer    pourcentageCompletion;

     @Column( name = "infos_identite", nullable = false, updatable = true, length = 1, columnDefinition = "TINYINT(1)" )
     private Boolean    infosIdentiteCompleted;

     @Column( name = "infos_coordonnees", nullable = false, updatable = true, length = 1, columnDefinition = "TINYINT(1)" )
     private Boolean    infosCoordonneesCompleted;

     @Column( name = "infos_bancaires", nullable = false, updatable = true, length = 1, columnDefinition = "TINYINT(1)" )
     private Boolean    infosBancaireCompleted;

     @Column( name = "infos_chicowa", nullable = false, updatable = true, length = 1, columnDefinition = "TINYINT(1)" )
     private Boolean    infosCompleted;

   //the setter method
   public void setUser( T_user user) {
      this.user = user;
      this.infosIdentiteCompleted = true;
      this.pourcentageCompletion = 0;
      this.infosCoordonneesCompleted = this.user.getInfosCoordonnees() == null ? false : true;
      this.infosBancaireCompleted = this.user.getInfosBancaire() == null ? false : true;
      this.infosCompleted = this.user.getInfosCompleted() == null ? false : true;

      if ( this.infosCoordonneesCompleted == true ) {
        this.pourcentageCompletion = 50;
    }
      if ( this.infosBancaireCompleted == true && this.pourcentageCompletion == 50 ) {
        this.pourcentageCompletion = 75;
    }
      if ( this.infosChicowaCompleted == true && this.pourcentageCompletion == 75 ) {
        this.pourcentageCompletion = 100;
    }
  }
}


我也有这种方法,用于更新用户的infosProfile:

@Service
public class UIServiceImpl implements UIService {

  @Autowired
  private TinfosProfileRepository   infosProfileRepository;

  @Override
  public T_infosProfile saveInfosPorfile( T_user connectedUser ){
    T_infosProfile infosProfile = connectedUser.getInfosProfile();
    infosProfile.setUser( connectedUser );
    connectedUser.setInfosProfile( infosProfile );
    try {
        return infosProfileRepository.save( infosProfile );
    } catch ( Exception e ) {
        throw new ExceptionsDAO( e.getMessage() );
    }
}


但是,当我调用此方法时,它在一种情况下有效,但在另一种情况下,出现此异常:

10-04-2017 16:27:43 [http-nio-8080-exec-3] WARN  o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 1062, SQLState: 23000
10-04-2017 16:27:43 [http-nio-8080-exec-3] ERROR  o.h.e.jdbc.spi.SqlExceptionHelper - Duplicate entry '8' for key 'UK_bkariaocmnn2rlh477hvoqkyf'


我只想更新当前用户的infosProfile的属性。
它工作正常的情况是仅更新一个infosProfile的属性,但是当我同时更新2个属性并尝试saveInfosProfile()时,会引发异常。

请帮忙。

最佳答案

查看错误消息,它很容易解释,因为它表示该列中已经存在值8。抛出该错误,因为您已在该特定列上定义了UNIQUE CONSTRAINT

Duplicate entry '8' for key 'UK_bkariaocmnn2rlh477hvoqkyf'


附加:查看您的约束名称UK_bkariaocmnn2rlh477hvoqkyf。当您在创建约束时未命名约束时,就会发生这种情况。

关于mysql - Hibernate如何解决“ERROR o.h.e.jdbc.spi.SqlExceptionHelper-重复条目”异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43326635/

10-10 18:36