Jar boot JPA aktualizáciu iba v špecifických oblastiach

0

Otázka

Tak som sa stretol tento problém s aktualizáciou účtovná jednotka v DB. pri Prechode celku subjektom a aktualizuje iba v špecifických oblastiach sa to lieči panenských polí, ako null, výsledkom bolo, že som dostať výnimku, keďže tieto polia sú @Not-Null,

Snažil som sa hľadať podobné problémy, ale nemohol vyriešiť môj problém.

Spoločnosť 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äčšina polí @NotNull na tvorbu som však potrebné aktualizovať jednotka, niekedy len v špecifických oblastiach.

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";
}

ako môžete vidieť ENTITY prešla, ktoré spôsobuje ostatných atribútov, ktoré sa automaticky null, ak nie sú upravené.

Radič:

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

VÝNIMKA:

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}'}
]

Vďaka.

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

Najlepšiu odpoveď

0

Regulátor je záväzné hodnoty, môžete prejsť na novú Spoločnosť subjektu. Nová jednotka nie je pripojená k vytrvalosti kontexte, nemá štát existujúce entity. Keď si ju uložiť, JPA si myslí, že chcete null všetky polia nemusíte hodnoty.

Namiesto toho by ste mohli mať radič viazať svoje argumenty na DTO. Potom v službe môžete pozrieť do existujúceho Zákazníka, pomocou findById, a kópiu polia, ktoré chcete aktualizovať, z DTO účtovnej jednotke. Potom hovor saveAndFlush prechádza v aktualizované subjektu.

Vyzerá to tam je zlepšenie oproti DTO, môžete použiť aJsonPatch držať aktualizácie prešiel v, pozri https://www.baeldung.com/spring-rest-json-patch. Patch metóda javí ako lepší zápas za to, čo robíte, aj tak.

Na serveri dôležité je pozrieť sa do existujúceho subjektu tak, že budete mať účtovná jednotka, ktorá je pripojená k vytrvalosti kontexte a má všetky oblasti jej prúd.

2021-11-21 20:00:13

V iných jazykoch

Táto stránka je v iných jazykoch

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