Ich habe ein Domain-Objekt, das wieJava Einschränkungsverletzungen und Hibernate Validierungen nicht woking auf Update
unten sieht@Entity
@Table(name = "zone")
public class Zone {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
@Column(unique=true, nullable=false)
String uuid;
@NotNull
@Size(min=1)
@Column(unique=true, nullable=false)
String name;
@NotNull
@Size(min=1)
@Column(nullable=false)
String admin;
}
Es zwei Service-Anrufe, die die Zone zu speichern und aktualisieren
@Override
public Zone create(Zone zone) {
if((zone.getUuid()==null)||(zone.getUuid().isEmpty())){
String uuid = UUID.randomUUID().toString();
zone.setUuid(uuid);
}
zoneRepository.save(zone);
return zone;
}
@Override
public Zone update(Zone zone) {
zoneRepository.save(zone);
return zone;
}
Zone Repositoryobjekte erweitert JPA Repository des Federdaten-Frameworks
public interface ZoneRepository extends JpaRepository<Zone, Long>
Ich verwende Einheit Testfälle, die beiden Dienste zu testen
@Test(expected=ConstraintViolationException.class)
public void createZoneWithBlankName(){
Zone zone = new Zone();
zone.setName("");
zone.setAdmin("Admin");
zoneService.create(zone);
}
Dieser Testfall ConstraintViolationException wirft wie erwartet, wenn Name leer ist. Aber wenn ich mit einem leeren Namen eine bereits bestehende Zone an Aktualisierung wird keine ConstraintViolationException geworfen und der Testfall unter versagt
@Test(expected=ConstraintViolationException.class)
public void updateZoneWithBlankName(){
Zone zone = new Zone();
zone.setName("Zone");
zone.setAdmin("Admin");
zoneService.create(zone);
Assert.assertTrue(zone.getId() != 0);
long id = zone.getId();
String newZoneName = "";
String newAdmin = "New Admin";
Zone zoneToUpdate = new Zone();
zoneToUpdate.setId(id);
zoneToUpdate.setName(newZoneName);
zoneToUpdate.setAdmin(newAdmin);
zoneService.create(zoneToUpdate);
}
Wenn ich die ID von „zoneToUpdate“ Objekt auf einen anderen Wert als die vorhandenen ID gesetzt, Dann wird die Constraint-Verletzung ausgelöst. Dies bedeutet, dass die Ausnahme nur zum Erstellen neuer Objekte und nicht zum Aktualisieren der vorhandenen Objekte ausgelöst wird.