Duvida UPDATE / @NamedQuery [RESOLVIDO]

Bom dia a todos,

Estou tentando atualizar um campo da minha tabela movimentacao onde o mesmo possui um outro objeto definido “Status”, mas não estou conseguindo, alguem tem algum exemplo de como fazer isso?

Tabela

Movimentacao
codigo
data

status

Tabela

Status
codigo
descricao

@NamedQuery(name = "Movimentacao.UpdateInativaStatus", query = "UPDATE Movimentacao m SET m.stacodigo.stacodigo = 2 WHERE m.movcodigo = :movcodigo ")

Por que não atualiza direto na tabela statcodigo?

Eu gostaria de atualizar o estatus da movimentação que é um objeto, consegui atualizar utilizando o NativeQuery direto na tabela porem o objeto não fica atualizado.

Pelo que entendi, stacodigo é um objeto. A relação entre este e Movimentacao é ???
Creio que tenha sido criado uma outra tabela que represente este objeto, logo, você precisa atualizar a coluna desta tabela…

Mostra a sua chamada a namedQuery

Chamada

Query query = em.createNamedQuery("Movimentacao.UpdateInativaStatus");
query.setParameter("movcodigo", m.getMovcodigo());
query.executeUpdate();

Então mas não consigo nem logar no sistema pois da o erro:

Exception Description: Error compiling the query [Movimentacao.UpdateInativaStatus: UPDATE Movimentacao m SET m.stacodigo.stacodigo = 2 WHERE m.movcodigo = :movcodigo ], line 1, column 28: invalid navigation expression [m.stacodigo], cannot navigate association field [stacodigo] in the SET clause target.

hum…
O seu atributo stacodigo, dentro de Movimentação é um atributo de tipo primitivo ou objeto de uma entidade ?

isso o campo “stacodigo” definido na movimentacao é um objeto do tipo status

E status tem relacionamento com Movimentação ?

Mostra essas 2 entidades por favor

Classe Status

    @Id
    @Basic(optional = false)
    @Column(name = "stacodigo", nullable = false)
    private Integer stacodigo = 1;
    @Basic(optional = false)
    @Column(name = "stanome", nullable = false, length = 20)
    private String stanome = "";

E na movimentação esta definido

    @JoinColumn(name = "stacodigo", referencedColumnName = "stacodigo", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Status stacodigo = new Status(1, "ATIVO");

SOLUÇÃO

Resolvi o problema passando tambem o objeto “Status” como parametro, dai ele conseguiu ser setado, obrigado a todos que me ajudarão.

@NamedQuery(name = "Movimentacao.UpdateInativaStatus", query = "UPDATE Movimentacao m SET m.stacodigo = :stacodigo WHERE m.movcodigo = :movcodigo ")
Query query = em.createNamedQuery("Movimentacao.UpdateInativaStatus");
query.setParameter("movcodigo", m.getMovcodigo());
query.setParameter("stacodigo", new Status(2,"INATIVO"));
query.executeUpdate();