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();