Boa noite!
Estou fazendo um cadastro de numeros seriais, sendo que eles são inseridos e removidos no produto e posteriormente vinculados a um item de uma operação. Na operação, o usuário digita um número serial e o sistema deve trazer o registro correspondente do banco de dados. Por exemplo, tenho um produto com os seriais: 123, 456 e 789. Na operação, vou digitar: 456 e 789. O sistema deve buscar na base e me trazer os seriais que eu quero e adicioná-los a uma lista do meu item da operação. Estou buscando da seguinte forma:
try {
novoSerial = (Serial) em.createQuery("select s from Serial s where s.numero='" + serial.getText() + "' and s.produto.id="+pai.item.getProduto().getId()).getSingleResult();
} catch (Exception e) {}
if (novoSerial != null) {
constaB = true;
}
try {
novoSerial = (Serial) em.createQuery("select s from Serial s where s.ean='" + ean.getText() + "' and s.produto.id="+pai.item.getProduto().getId()).getSingleResult();
} catch (Exception e) {}
if (novoSerial != null) {
constaB = true;
}
try {
novoSerial = (Serial) em.createQuery("select s from Serial s where s.partNumber='" + partNumber.getText() + "' and s.produto.id="+pai.item.getProduto().getId()).getSingleResult();
} catch (Exception e) {}
if (novoSerial != null) {
constaB = true;
}
Um serial pode ter numero OU ean OU part number… nunca mais de um desses. Como o serial está vinculado a um produto (o mesmo que estou usando na operação), busco-o pelo tres numeros.
Agora vamos aos problemas… esse código só está funcionando uma vez. Se eu tentar colocar mais de um serial na operação, da este erro:
[quote]java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: wserp.model.entity.OperacaoItem[id=null].
[/quote]
O estranho é que ele aponta para as linhas que fazem a query. Pelo que entendi a excessão foi por causa de um novo objeto, mas como poderia se eu nao estou inserindo, mas sim selecionando? Estou sem nenhuma idéia de como resolver isso. Por isso, conto com vocês.