【问题标题】:Hibernate data truncation: Incorrect integer value: '\xAC\xED\x00\x05sr\x00& when trying to save a OneToMany Relation休眠数据截断:不正确的整数值:'\xAC\xED\x00\x05sr\x00& 尝试保存 OneToMany 关系时
【发布时间】:2021-01-26 15:31:32
【问题描述】:

我有两个具有这种关系的实体

活动

@Data
@Table(name = "Event", schema = "schema")
public class Event extends Loggable implements Serializable {
        
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Integer id;
            
  //   ....
    
  @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.ALL}, fetch = FetchType.EAGER)
  List<RecurringPattern> recurringPatterns;
    
  private void setRecurringPatterns(List<RecurringPattern> children) {
     this.recurringPatterns = children;
  }
    
  public void addRecurringPattern(RecurringPattern child) {
     recurringPatterns.add(child);
     child.setEvent(this);
  }

循环模式

@Data
@Table(name = "RecurringPattern")
public class RecurringPattern implements Serializable {
    
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Integer id;
    
   @Column(name = "eventId") <-- ManyToOne here has caused problems
   private Event event;

}

在“一次性”操作中的控制器中,我尝试同时保存 Event 和他的 RecurringPattern 孩子,从 Json 读取数据。

event = new Event();
recurringPattern = new RecurringPattern();
    
event.GetDataFromJson(...);
recurringPattern.GetDataFromJson(...);
event.addRecurringPattern(recurringPattern);
    
try {
   eventRepository.save(event);
}
catch(Exception e) {
   System.out.println(e.getMessage());
}

使用调试器,一切似乎都很好,.save() 方法期间没有抛出异常。

但是我在 Stacktrace 中得到了这种错误:

    com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect integer value: '\xAC\xED\x00\x05sr\x00&it.***.checklist.models.calendar.Event\xD9\x09\xD1\x95\xF9\xBF\x05F\x02\x00\x0FL\x00\x09createdByt\x00\x1' for column `schema`.`recurringpattern`.`eventId` at row 1

我真的不明白,是不是和我的注解或者数据库的utf编码有关?

【问题讨论】:

    标签: java mysql spring-boot hibernate


    【解决方案1】:

    你应该纠正这个:

    @Column(name = "eventId") <-- ManyToOne here has caused problems
    private Event event;
    

    到这里:

    @ManyToOne
    @JoinColumn(name = "eventId")
    private Event event;
    

    还有这个:

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.ALL}, fetch = FetchType.EAGER)
    List<RecurringPattern> recurringPatterns;
    

    到这里:

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "event")
    List<RecurringPattern> recurringPatterns;
    

    另见 this section 的休眠文档。

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多