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

Reply via email to