При попытке обновить spring-boot с версии 2.1.12 до 2.2.4 застрял в DataIntegrityViolationException при попытке вставить несколько объектов в MySQL с помощью JPA.
Пример объекта:
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
@Table(name = "user")public class User {
@Id
@Column(name = "id")
@JsonProperty("id")
private String id;
@PrimaryKeyJoinColumn
@OneToOne(cascade = CascadeType.ALL)
@JsonProperty("status")
private UserStatus status;
}
И пользовательский статус:
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "user_status")
public class UserStatus {
@Id
@Column(name = "id")
@JsonProperty("id")
private String id;
public UserStatus(String userId) {
this.id = userId;
}
}
Чтобы вставить объект в mysql Я использую репозиторий jpa по умолчанию:
@Repository
public interface UserRepository extends JpaRepository<User, String> {
}
С spring-boot-2.1.x userRepository.save(user)
работает нормально, но с 2.2.x возникает это исключение:
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
С этими данными в журнале:
Cannot add or update a child row: a foreign key constraint fails (`test`.`user_status`, CONSTRAINT `user_status_ibfk_1` FOREIGN KEY (`id`) REFERENCES `user` (`id`) ON DELETE CASCADE)
Если включить spring.jpa.show-SQL: true
, я обнаружил, что с spring-boot-2.2.x вставка в сущность User
не происходит, но со старой пружиной это происходит.
Я не обнаружил каких-либо существенных изменений в подключении с использованием весенней загрузки к спящему режиму, а также никаких существенных изменений в самом спящем режиме после соответствующего обновления. Есть ли что-то обновленное, что не описано в заметках о выпуске?