Duvida UPDATE / @NamedQuery [RESOLVIDO]

11 respostas
J

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 ")

11 Respostas

D

Por que não atualiza direto na tabela statcodigo?

J

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.

D

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…

L

Mostra a sua chamada a namedQuery

J

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.

L

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

J

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

L

E status tem relacionamento com Movimentação ?

L

Mostra essas 2 entidades por favor

J

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");
J

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();
Criado 8 de agosto de 2012
Ultima resposta 8 de ago. de 2012
Respostas 11
Participantes 3