openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilberto C Andrade <gilbert...@secad.to.gov.br>
Subject NPE on ManyToOne while using insertable = false, updatable = false
Date Wed, 02 Jan 2008 17:33:53 GMT
Hi,

openjpa 1.0.1, jdk 1.5
Produto:
> @Entity
> @Table(name = "produto")
> public class Produto implements Serializable {
>     @Id
>     @GeneratedValue(strategy=GenerationType.TABLE, generator="ProdutoGerador")
>     @TableGenerator(name="ProdutoGerador", table="ID_GERADOR", pkColumnName="PK",
>         valueColumnName="AID", pkColumnValue="produto_id_gerador", allocationSize=1,
initialValue=1)
>     @Column(name="cd_produto", columnDefinition="INTEGER")
>     private Integer cdProduto;

Item:
> @Entity
> @Table(name = "item")
> public class Item implements Serializable {
>     @Transient
>     protected final Log log = LogFactory.getLog(getClass());
>     @Id
>     @GeneratedValue(strategy=GenerationType.TABLE, generator="ItemGerador")
>     @TableGenerator(name="ItemGerador", table="ID_GERADOR", pkColumnName="PK",
>         valueColumnName="AID", pkColumnValue="item_id_gerador", allocationSize=1, initialValue=1)
>     @Column(name="cd_item", columnDefinition="INTEGER")
>     private Integer cdItem;
.
.
.
>     
>     @Column(name = "cd_produto")    
>     private Integer cdProduto;
>     
>     @ManyToOne
>     @JoinColumn(name = "cd_produto", referencedColumnName="cd_produto", insertable =
false, updatable = false)    
>     private Produto produto;//read only

OBS.: Originally this was mapped the following way, using hibernate's tag:
>       <many-to-one
>             name="produto"
>             class="org.appfuse.model.estoque.Produto"
>             cascade="none"
>             outer-join="true"
>             update="false"
>             insert="false"
>             access="property"
>             column="cd_produto"
>         />



Test:
>     @Test
>     public void persistRemoveItemTest() {
>         log.debug("\npersistRemoveItemTest - Criação de uma instância da classe Item\n");
>         String nomeItem = "Calça";
>         Integer cdItem = null;
>         BigDecimal precoVenda = new BigDecimal(0.0F);
>         BigDecimal precoCusto = new BigDecimal(0.0F);
>         UnidadeMedida uM = em.find(UnidadeMedida.class, "MT");
>         Float estoqueAtual = 0.0F;
>         Float estoqueMinimo = 0.0F;
>         Float nivelDeReposicao = 0.0F;
>         Boolean flDescontinuado = false;
>         Produto p = em.find(Produto.class, 1);
>        
>         Item i = new Item(nomeItem,precoVenda, precoCusto, uM.getCdUnidadeMedida(), estoqueAtual,
estoqueMinimo, nivelDeReposicao, flDescontinuado, p.getCdProduto());
>         assertNull("cdItem antes do método persist:",i.getCdItem());
>         em.getTransaction().begin();
>         em.persist(i);
>         em.getTransaction().commit();
>         log.debug("Objeto pós gravação: \n"+i);
>         cdItem = i.getCdItem();
>         i = null;
>        
>         assertNotNull("cdItem pós persist:",cdItem);
>         
>         Item i2 = em.find(Item.class, cdItem);
>         log.debug("Objeto carregado: \n"+i2);
>         assertNotNull("Não pode ser nulo:",i2.getProduto());<====================
Here is the problem!
>     }

As you can see I'm testing the lazy load of the Produto class. But i2
instance comes with null produto.

Is there anything wrong with my mapping?

Thanks,

Gilberto

Mime
View raw message