Skip to content

Instantly share code, notes, and snippets.

@rponte
Created April 12, 2022 21:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rponte/6630e8dfcd555d6c31a368efe1176b60 to your computer and use it in GitHub Desktop.
Save rponte/6630e8dfcd555d6c31a368efe1176b60 to your computer and use it in GitHub Desktop.
JPA and Hibernate: Bean validation error when merging a transient entity
@SpringBootTest
public class NewJpaTest {
@Autowired
private EntityManager manager;
@Test
@Transactional
public void shouldMergeAnAlbumWithItsImages() {
Album album = new Album(List.of(new Image()));
Album managedAlbum = manager.merge(album); // throws a ConstraintViolationException due to @Size(min=1) violation
assertNull(album.getId());
assertNotNull(managedAlbum.getId());
}
}
@Entity
public class Album {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(min = 1)
@OneToMany(cascade = {
CascadeType.PERSIST, CascadeType.MERGE
})
private List<Image> images = new ArrayList<>();
@Deprecated
public Album() {}
public Album(List<Image> images) {
this.images = images;
}
public void addImage(Image newImage) {
this.images.add(newImage);
}
public List<Image> getImages() {
return this.images;
}
}
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Long getId() {
return this.id;
}
}