Я запускаю интеграционный тест Spring Boot, который сохраняет в базу данных H2 с использованием JPA.Существует 2 основных объекта MyRequest и MyResponse с отношением один к одному - поле типа MyResponse находится в MyRequest, и тест вызывает save () в хранилище, передавая ему объект MyRequest.Почему тест не проходит с этим исключением?- org.hibernate.id.IdentifierGenerationException: пустой идентификатор, сгенерированный для: class MyResponse
При проверке точки останова идентификаторы как объекта MyRequest, так и MyResponse внутри него равны нулю.
Та же ошибка возникает при использованииGenerationType.AUTO вместо GenerationType.IDENTITY.Вызовы count () и findAll () в репозитории возвращают 0 и пустой список соответственно.
@Entity
@Table(schema = "MySchema", name = "MyRequest")
@Data
public class MyRequest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "MyRequestID")
private Integer myRequestId;
@OneToOne(mappedBy = "myRequestHeader", fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
private MyResponse myResponse;
.... Other fields
}
@Entity
@Table(schema = "MySchema", name = "MyResponse")
@Data
public class MyResponse {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "MyResponseID")
private Integer myResponseId;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private MyRequest myRequest;
.... Other fields
}
@Repository
public interface MyRepository extends JpaRepository<MyRequest, Integer> {
}
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY)
@RunWith(SpringRunner.class)
@AutoConfigureWireMock(port = 0)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyIntegrationTest {
private MyRepository myRepository
//construct myRequest
long count = myRepository.count(); //returns 0
List<MyRequest> all = myRepository.findAll(); //returns empty list
myRepository.save(myRequest); // fails with exception
}