Spring+JPA, campo transient visível na View e que nao seja persistente?

Boa noite pessoal, me ajudem pelo amor de Deus :smiley: tenho um filtro que faço manualmente com a @query() que nela eu faço um join calculando total de uma venda ou seja,

SUM(valor * quantidade) as total

la no fim vou por o filtro pra vcs… o que ocorre é o seguinte, esse campo “temporario” total que se refere ao total da venda, quando eu crio ele na minha entity o jpa quer persisti ele no banco, daí eu utilizo o @transient porém ele nao fica visível na view, eu teria que da um setTotal() no controller pra poder ele ter algum valor…

ja tentei de diversas formas, segue abaixo…

@NumberFormat(pattern = “#,##0.00”)
transient BigDecimal total;
Desse forma acima, ele não é visível na view, não trás o valor do banco, somente se eu der um setTotal().

@Column(updatable = false, insertable = false) // até assim (não funciona)
@NumberFormat(pattern = "#,##0.00")
@Transient
private BigDecimal valortemporario;

desas forma acima, ele é visível na view, mas tenta persistir no banco, logico que dá erro, pois o campo não existe na tabela.

@Column(updatable = false, insertable = false) // até assim (não funciona)
@NumberFormat(pattern = "#,##0.00")
private BigDecimal valortemporario;

Dessa forma acima, também não funciona, ele tenta gravar no banco tbm…

abaixo deixo meu Repository so pra ver ter noção geral da coisa:

public interface AtendimentosRepository extends JpaRepository<Atendimentos, Long> {

String sqlPrincipal = "SELECT id_heados, pecastotal.total as total, "
        +" maoobra_heados,+"veiculo_km_heados,bsextras_heados,"
        +" tipoatendimento_heados,  "
        + " datasaida_heados FROM heados  "

        + " LEFT JOIN ( (SELECT pedos.controle_pedos,adicional_pedos,"
        + " sum( ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) - (  "
        + " ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') )  * COALESCE(desconto_pedos,'0') /100"
        + " ) ) as total FROM pedos as pedos  WHERE adicional_pedos  = 'N'"
        + " group by pedos.controle_pedos) ) pecastotal ON controle_pedos  = id_heados"

        + " WHERE id_heados = :controle ";

@Query(value = sqlPrincipal, nativeQuery = true)
public Atendimentos atendimentoByControle(@Param("controle") Long controle);
}

Tentei encontrar uma forma de retirar da minha classe Entity o campo referente ao total, mas não encontrei nenhuma função pra isso.

Alguém já passou por isso?? tem outra solução??

Obrigado!!

Mas esse é o comportamento normal, veja, você persistiu apenas os dados de valor e quantidade, não o total. Se está retornando a mesma entity que foi persistida, esse valor que havia no total foi perdido, logo, você teria que setar toda vez que salva no BD.

Olá Darlan obg por responder, ver o que acontece, são tuas tabelas, venda e pedidos, daí essa consulta que faço é em vendas com o join->pedidos, e nele o SUM(valor * qtd) as total, para somar o total da venda, daí no classe Entity de vendas eu faço referencia a esse campo total e é ele que nao quero e nem posso persistir… mas quero exibi-lo na view!

Obs… a persistência de vendas que contém (cliente, data, etc) e a tabela Pedidos que contém (produto, valor, qtd) são persistidos separados e em momentos distintos, o campo Total não criei na tabela (vendas) para não precisar me preocupar em atualiza-lo sempre que incluir um produto.
Em PHP isso eu controlava de boa, mas aqui no java(Spring) travei nisso!

Obg

Veja, você tem a classe Venda, que é uma entiy, onde você tem um atributo chamado total, que é transient (ou seja, o valor dele nunca vai estar no banco de dados), certo?
Ponto.
Por outro lado, na view, você tem um campo onde você espera o valor do atributo total de um objeto da classe Venda, certo?
Vamos supor que, além desse atributo, você mostre a data e hora da venda e que esta informação, data e hora, tenha sido persistida no banco.
O valor do atributo dataHora é recuperado e definido na consulta (ou seja, em algum momento, seja diretamente ou indiretamente, é invocado o método setDataHora(LocalDateTime dataHora)), porém, em nenhum momento é chamado o método setTotal(Double total) pois o mesmo não vem do banco de dados,não é isso?

Sim darlan, isso mesmo nunca vou dar o setTotal() pois ele vem do Join da tabela (pedidos)

LEFT JOIN ( (SELECT pedos.controle_pedos,adicional_pedos,"
    + " sum( ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) 
    + " ) ) as total FROM pedos as pedos  group by pedos.controle_pedos) ) pecastotal ON controle_pedos  = id_heados"

Valeu!