Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

CASCADE.ALL NÃO ESTÁ ATUALIZANDO ENTIDADES FILHAS NO DB

Bom dia,

Peguei um projeto recentemente e estou me deparando com um probleminha chato e que não faz muito sentido para mim.

Possuo as seguintes classes:


@Entity
@Table(name = "agency")
@Data
@EqualsAndHashCode(of = {}, callSuper = true)
public class Agency extends BaseEntity {

    public static final String[] agencyPropertiesDontCopyForUpdate = { "id", "enabled", "createDate", "modifyDate" };

    // omitido...

    @JsonIgnoreProperties({ "client" })
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "owner_person_id")
    private Person owner;

    // omitido...

//    @JsonIgnoreProperties({ "agency" })
    @OneToMany(mappedBy = "agency", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<OtcUser> users;

    // omitido...

}
@Entity
@Table(name = "person")
@Data
@EqualsAndHashCode(of = {}, callSuper = true)
public class Person extends BaseEntity {

    public static final String[] personPropertiesDontCopyForUpdate = { "id", "enabled", "createDate", "modifyDate",
            "client" };

    @NotNull
    @Size(min = 2, max = 35)
    @Column(name = "first_name")
    private String firstName;

    @NotNull
    @Size(min = 2, max = 35)
    @Column(name = "last_name")
    private String lastName;

    @NotNull
    @Size(min = 11, max = 11)
    @CPF
    private String cpf;

    // omitido...

    @Letters(type = LettersType.UPPER_CASE_WITHOUT_ACCENT)
    @NotNull
    @Size(min = 2, max = 2)
    @Column(name = "country_of_residence")
    private String countryOfResidence;

    @JsonBackReference
    // @JsonIgnoreProperties({ "personData" })
    @OneToOne(mappedBy = "personData")
    private Client client;

    private Boolean enabled;

    // @JsonBackReference
    //// @JsonIgnoreProperties({ "personData" })
    // @OneToMany(mappedBy = "personData", fetch = FetchType.EAGER)
    // private List<TravelAgent> users;

    @JsonIgnore
    public String getCompleteName() {
        return getFirstName() + " " + getLastName();
    }

}

Quanto tempo ATUALIZAR a entidade "Person" que existe dentro de agência, ocorre que no log do console indica que realizou o 'update - sql', só que quando vou ver no banco de dados, não modificou nada.

Abaixo a classe "service":

public Agency update(Long id, Agency agency) {
        Agency agencySaved = findAgencyById(id);
        validateCity(agency);
        validateProfile(agency);
        validateGroups(agency);

        List<Group> groups = groupRepository.findGroupsByHeadAgency(agencySaved.getId());
        if (groups != null) {
            for (Group group : groups) {
                if (!agency.getGroups().contains(group)) {
                    throw new HeadAgencyRemovedFromGroupException();
                }
            }
        }

        BeanUtils.copyProperties(agency, agencySaved, Agency.agencyPropertiesDontCopyForUpdate);
        Agency saveAgency = agencyRepository.save(agencySaved);

// Se for implementado essa parte, funcionará, já que estou salvando / alterando diretamente.
//        Person saveOwner = personRepository.save(agency.getOwner());
        return saveAgency;
    }

Alguém sabia explicar o porque de não estar modificando no banco de dados? Lembrando que não ocorre erros no console, apenas indica que realizou o "update", mas no final não modifica nada no banco de dados.

1 resposta
solução!

Oi Frank,

Você precisa colocar na sua classe Person o relacionamento:

@OneToMany(mappedBy="owner") private List agencys;

dessa forma, o provedor de persistência saberá que a coluna de JOIN deve estar na tabela Agency.