Jarní boot SPS aktualizace aktualizovat pouze na specifické oblasti,

0

Otázka

Tak jsem narazil na tento problém s aktualizací účetní jednotka v DB. při Průchodu celou bytost a aktualizace pouze na specifické oblasti, zachází nedotčené pole jako null, je výsledkem jsem dostat výjimku, protože ta pole jsou @Not-Null,

Snažil jsem se hledat podobné problémy, ale nemůže vyřešit můj problém.

Společnost SUBJEKTU:

@Entity
@Table (name = "companies")
@Data
@ToString(exclude = "perfumes")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @NotNull
    private String name;

    @NotNull
    @Email(message = "Wrong input. please enter a VALID email address")
    private String email;

    @NotNull
    @Size(min = 4, max = 14, message = "Password range must be between 4 - 14 digits")
    private String password;

    @NotNull
    @Enumerated(EnumType.STRING)
    private Country country;

    @Singular
    @OneToMany(mappedBy = "company", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Perfume> perfumes = new ArrayList<>();
}

Většina polí jsou @NotNull pro vytvoření, nicméně, musím aktualizovat entitu, někdy pouze na specifické oblasti.

Služby:

@Override
public String updateCompany(int id, Company company) throws DoesNotExistException {
    if(!companyRepository.existsById(id))
    {
        throw new DoesNotExistException(id);
    }

    companyRepository.saveAndFlush(company);
    return company.getName() + " has been UPDATED";
}

jak můžete vidět ENTITY byl předán, což způsobuje, že ostatní atributy, které mají být automaticky null, pokud není upraven.

Správce:

  @PutMapping("/updateCompany/{id}")
    @ResponseStatus(HttpStatus.ACCEPTED)
    public String updateCompany(@PathVariable int id, @RequestBody Company company) throws DoesNotExistException {
        return admin.updateCompany(id,company);
    }

VÝJIMKA:

Validation failed for classes [com.golden.scent.beans.Company] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=password, rootBeanClass=class com.golden.scent.beans.Company, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]

Díky.

hibernate java jpa
2021-11-21 18:38:43
1

Nejlepší odpověď

0

Regulátor je závazné hodnoty přenést do nové Společnosti bytost. Nová jednotka není připojena k přetrvávání kontextu, to nemusí stavu pre-existující bytost. Když ji uložíte SPS myslí, že chcete null všechny pole nemusíš hodnoty.

Místo toho, můžete mít řadič vázat své argumenty do DTO. Pak ve službě se podíváte do stávajícího Zákazníka, pomocí findById, a kopii pole, která chcete aktualizovat z DTO subjektu. Pak zavolejte saveAndFlush procházející v aktualizované subjektu.

Vypadá to, že je tam zlepšení oproti DTO, můžete použít aJsonPatch držet aktualizací prošel v roce, viz https://www.baeldung.com/spring-rest-json-patch. Metoda patch vypadá jako lepší zápas pro to, co děláte tak jako tak.

Na serveru, důležité je podívat se na stávající subjekt tak, že máte účetní jednotka, která je připojena k vytrvalosti kontextu a má všechny její oblasti aktuální.

2021-11-21 20:00:13

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................