Hibernate manyToMany annotations - cascade on relationship problem
3 respostas
romuloff
[color=blue]edit: este primeiro problema foi resolvido na resposta abaixo, mas há outro problema muito maior![/color]
Pessoal, como faz pra ensinar o hibernate a não utilizar identificadores maiores que 30 caracteres ?
Olhem o log do sql que ele gerou pra um consulta na minha aplicação:
<blockquote>INFO[LoggerStream.write():152]-Hibernate:
select
relproduto0_.SAN_PRODUTO_PRODUTO_IDasSAN5_1_,
relproduto0_.relProdutoCustoCollection_CUSTO_IDasrelProdu6_1_,
relproduto0_.relProdutoCustoCollection_PRODUTO_IDasrelProdu7_1_,
relproduto1_.CUSTO_IDasCUSTO4_19_0_,
relproduto1_.PRODUTO_IDasPRODUTO3_19_0_,
relproduto1_.QUANTIDADEasQUANTIDADE19_0_,
relproduto1_.VISIVEL_BOOLasVISIVEL2_19_0_
from
SAN_REL_PRODUTO_CUSTOrelproduto0_,
SAN_REL_PRODUTO_CUSTOrelproduto1_
where
relproduto0_.relProdutoCustoCollection_CUSTO_ID=relproduto1_.CUSTO_ID(+)
andrelproduto0_.relProdutoCustoCollection_PRODUTO_ID=relproduto1_.PRODUTO_ID(+)
andrelproduto0_.SAN_PRODUTO_PRODUTO_ID=?</blockquote>
resolví o problema aí de cima. Dei uma força pro hibernate e renomeei o atributo relProdutoCustoCollection pra relProdCustoColl
Mas está ocorrendo outro problema agora:
INFO [LoggerStream.write():152] - Hibernate:
/* load collection br.com.ctbc.avalia.model.data.ProdutoTO.relProdCustoColl */ select
relprodcus0_.PRODUTO_ID as PRODUTO3_1_,
relprodcus0_.relProdCustoColl_CUSTO_ID as relProdC5_1_,
relprodcus0_.relProdCustoColl_PRODUTO_ID as relProdC6_1_,
relproduto1_.CUSTO_ID as CUSTO4_19_0_,
relproduto1_.PRODUTO_ID as PRODUTO3_19_0_,
relproduto1_.QUANTIDADE as QUANTIDADE19_0_,
relproduto1_.VISIVEL_BOOL as VISIVEL2_19_0_
from
SAN_REL_PRODUTO_CUSTO relprodcus0_,
SAN_REL_PRODUTO_CUSTO relproduto1_
where
relprodcus0_.relProdCustoColl_CUSTO_ID=relproduto1_.CUSTO_ID(+)
and relprodcus0_.relProdCustoColl_PRODUTO_ID=relproduto1_.PRODUTO_ID(+)
and relprodcus0_.PRODUTO_ID=?
ERROR [JDBCExceptionReporter.logExceptions():78] - ORA-00904: "RELPRODCUS0_"."RELPRODCUSTOCOLL_PRODUTO_ID": identificador inválido
De onde o hibernate está tirando esse RELPRODCUSTOCOLL_PRODUTO_ID ?
Muito estranho. o RELPRODCUSTOCOLL_ que está a mais é o atributo no TO com letras maiusculas. se remover ele fica certo :
"RELPRODCUS0_"."RELPRODCUSTOCOLL_PRODUTO_ID": identificador inválido
"RELPRODCUS0_"."PRODUTO_ID"
Nao consegui implementar com Cascade pra relação.
Um usuário até colocou um exemplo com cascade nas respostas ( no link acima faça uma pesquisa pelo texto “the sample code DOES NOT provide this”)
Mas ocorre o erro abaixo.
Creio que é porque o hibernate não está conseguindo associar o produtoTO no *RelProdutoCusto que estaria sendo salvo pelo cascade; devido aos RelProdutoCusto’s que foram setados no produtoTO ainda não terem a co-relação com produtoTO ( [color=red]exatamente porque quero com Cascade e ele deveria fazer essa associação após obter o produtoId, correto?[/color] ). Até que no exemplo do usuário AnD, ele descreve assim: //no need to set product since we are creating a new product
*RelProdutoCusto = meu relativo de ProductItem do link