OK, possuo uma classe ItensCompras onde tenho um campo grade_produto_codGrade que estava setado como optional =false entao alterei para true mas ele não modificou no banco de dados o campo para aceitar null.
entao quando vou incluir um itensCompras ele lança o erro.
Classe da persistencia:
@Id
@Basic(optional = false)
@SequenceGenerator(name = "id", initialValue=1, allocationSize = 1)
@GeneratedValue(strategy=GenerationType.TABLE, generator = "id")
@Column(name = "CODITEMCOMPRA")
private Integer coditemcompra;
@Column(name = "NOMEPRODUTO")
private String nomeproduto;
@Column(name = "VALORPRODUTO")
private Double valorproduto;
@Column(name = "QTDPRODUTO")
private Double qtdproduto;
@Column(name = "ACREDESCREALPRODUTO")
private Double acredescrealproduto;
@Column(name = "TIPOUNPRODUTO")
private String tipounproduto;
@Column(name = "IPIPERPRODUTO")
private Double ipiperproduto;
@Column(name = "IPIREALPRODUTO")
private Double ipirealproduto;
@Column(name = "DESCPRODUTO")
private String descproduto;
@Column(name = "VALORICMSPRODUTO")
private Double valoricmsproduto;
@JoinColumn(name = "COMPRA_CODCOMPRA", referencedColumnName = "CODCOMPRA")
@ManyToOne(optional = false)
private Compra compraCodcompra;
@JoinColumn(name = "GRADE_PRODUTOS_CODGRADE", referencedColumnName = "CODGRADE")
@ManyToOne(optional = true)
private GradeProdutos gradeProdutosCodgrade;
@JoinColumn(name = "MATERIA_PRIMA_CODMATPRIMA", referencedColumnName = "CODMATPRIMA")
@ManyToOne(optional = true)
private MateriaPrima materiaPrimaCodmatprima;
@Column(name = "SUBTOTALCOMPRA")
private Double subtotalcompra;
Desde já, obrigado!
ta para criar a tabela quando roda?
tenta limpar a aplicação e restartar tudo
Esse que é o problema, minha base de dados já possui dados, preciso alterar sem danificar os dados…
alterando o campo diretamente via codigo ou algo assim.
JPA não é o meu forte mais acredito que não seja possivel fazer isso mantedo os dados(via codigo).
Tem q alterar direto no banco.
Vai direto no banco e altera.
mais facil.
Entao, tenho varios clientes com esse mesmo sistema, gostaria de executar via codigo no banco de dados… tipo um script que executa no inicio do programa.
tipo… Alter Table x change bababa
utilizo o derbyDB, será que tem como?
edersongoulart , acho que o optional não é usado para isso, para habilitar a inserção de valores null você deve usar a propriedade nullable=true do @Collumn.
Não esqueça também de usar configuration.setProperty(“hibernate.order_updates”, “true”) para permitir a alteração do SQL.
vou testar então, já já mostro o resultado. Muito obrigado.
Não deu certo.
Implementei o nullable, ficou assim:
@JoinColumn(name = "GRADE_PRODUTOS_CODGRADE", referencedColumnName = "CODGRADE", nullable=true)
@ManyToOne(optional = true)
private GradeProdutos gradeProdutosCodgrade;
Propriedades do jpa:
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.username" value="erpdb"/>
<property name="hibernate.connection.password" value="erpdb"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.order_updates" value="true"/>
</properties>
Erro retornado:
Caused by: ERROR 23502: A coluna ‘GRADE_PRODUTOS_CODGRADE’ não aceita valor nulo.
creio que o nullable=true é apenas para campos "sem relacionamento"
e usado optional = true é para campo com relacionamento, não sei se essa informação é certa… mas to ficando puto com esse jpa. rsrsrs
alguma ideia :?:
Desde já agradeço.
Tive que botar na mão quando o sistema inicia.
usei "ALTER TABLE ITENS_COMPRAS ALTER COLUMN GRADE_PRODUTOS_CODGRADE NULL "
DerbyDb é o banco de dados
[quote=edersongoulart]Tive que botar na mão quando o sistema inicia.
usei "ALTER TABLE ITENS_COMPRAS ALTER COLUMN GRADE_PRODUTOS_CODGRADE NULL "
DerbyDb é o banco de dados[/quote]
Que bom que conseguiu resolver, não é como vc gostaria de fazer a príncipio mas é uma alternativa.
Teoricamente devia ter funcionado da forma como eu te sugeri, mas como não funcionou provavelmente o nullable=true só habilita a inserção de valores null apenas quando se cria a tabela, ou seja, vc deveria usar o hbm2ddl.auto como create, o que não é o seu caso, já que apagaria seus dados.
edersongoulart, você já resolveu seu problema mas só vou corrigir uma informação errada que te passei.
Para permitir a alteração do esquema SQL você dever usar o “hibernate.hbm2ddl.auto”, “update” e não o hibernate.order_updates", “true” como eu tinha dito em post desse tópico.
Abç