我有两个具有这种关系的实体
事件
@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;
}
在Controller的“单发”操作中,我尝试同时保存anEvent
和他的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编码有关吗?
您应该更正此:
@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;
另请参见休眠文档的本部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句