LOJA VIRTUAL COMPLETA - ERRO COM (cascade = CascadeType.ALL)

17/01/2011

0

Ol[a pessoal, o problema é que quando eu coloquei a classe Product, a propriedade category como cascade.all, ele da erro ao rodar os testes de produto dizendo que esta tentando gravar uma categoria que jah existe ... mas se eu tiro ... ele falha no SellSessionTest pq nao ta gravando category em cascade:
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseExceptionInternal Exception: java.sql.SQLIntegrityConstraintViolationException: A instrução foi interrompida, porque iria gerar um valor duplicado da chave em uma restrição de chave primária ou de unicidade identificada por 'SQL110117232013340' definida em 'CATEGORY'.Error Code: -1Call: INSERT INTO CATEGORY (ID, NAME, ACTIVE) VALUES (?, ?, ?)        bind => [5, The Changed Category 1, true]
MAS SE EU RETIRO O CASCADE ... ELE DA ERRO NA SELLSESSION:
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: be.com.devmedia.entity.Category[id=null].
AQUI ESTAO MINHAS CLASSES: PRODUTO
@Entity@Tablepublic class Product implements Serializable {
    private static final long serialVersionUID = 1L;    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Column    @Basic(optional = false)    private Integer id;    @NotNull    @NotEmpty    @Column(unique = true, nullable = false)    private String name;    @NotNull    @Column(nullable = false)    private BigDecimal cost;    @NotNull    @ManyToOne( optional = false)    @JoinColumn()    @Valid    private Category category;    @NotNull    @NotEmpty    @Column(nullable = false)    private String spec;    @NotNull    @Min(0)    @Column(nullable = false)    private int stock;    @OneToMany(cascade = CascadeType.ALL, mappedBy = "product", orphanRemoval = true)    private List<SellItem> sellItens;    @OneToMany(cascade = CascadeType.ALL, mappedBy = "product", orphanRemoval = true)    private List<CallOnAvaliable> callers = new LinkedList<CallOnAvaliable>();
    public void addCaller(CallOnAvaliable caller) {        caller.setProduct(this);        getCallers().add(caller);    }
    public boolean isOutOfStock() {        return (getStock() == 0);    }
    public List<SellItem> getSellItens() {        return sellItens;    }
    public void setSellItens(List<SellItem> sellItens) {        this.sellItens = sellItens;    }
    public Category getCategory() {        return category;    }
    public void setCategory(Category category) {        this.category = category;    }
    public BigDecimal getCost() {        return cost;    }
    public void setCost(BigDecimal cost) {        this.cost = cost;    }
    public String getName() {        return name;    }
    public void setName(String name) {        this.name = name;    }
    public String getSpec() {        return spec;    }
    public void setSpec(String spec) {        this.spec = spec;    }
    public int getStock() {        return stock;    }
    public void setStock(int stock) {        this.stock = stock;    }
    public Integer getId() {        return id;    }
    public void setId(Integer id) {        this.id = id;    }
    public List<CallOnAvaliable> getCallers() {        return callers;    }
    public void setCallers(List<CallOnAvaliable> callers) {        this.callers = callers;    }
    @Override    public int hashCode() {        int hash = 0;        hash += (id != null ? id.hashCode() : 0);        return hash;    }
    @Override    public boolean equals(Object object) {        // TODO: Warning - this method won't work in the case the id fields are not set        if (!(object instanceof Product)) {            return false;        }        Product other = (Product) object;        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {            return false;        }        return true;    }
    @Override    public String toString() {        return "be.com.devmedia.entity.Product[id=" + id + "]";    }}


CATEGORY@Entity@Tablepublic class Category implements Serializable {
    private static final long serialVersionUID = 1L;    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Column    @Basic(optional = false)    private Integer id;    @NotNull    @NotEmpty    @Column(nullable = false, unique = true)    private String name;    @NotNull    @Column(nullable = false)    private boolean active = true;    @OneToMany(cascade = CascadeType.ALL, mappedBy = "category", orphanRemoval = true)    private List<Product> products = new LinkedList<Product>();
    public void addProduct(Product prod) {        prod.setCategory(this);        getProducts().add(prod);    }
    public boolean isActive() {        return active;    }
    public void setActive(boolean active) {        this.active = active;    }
    public Integer getId() {        return id;    }
    public void setId(Integer id) {        this.id = id;    }
    public String getName() {        return name;    }
    public void setName(String name) {        this.name = name;    }
    @Override    public int hashCode() {        int hash = 0;        hash += (id != null ? id.hashCode() : 0);        return hash;    }
    public List<Product> getProducts() {        return products;    }
    public void setProducts(List<Product> products) {        this.products = products;    }
    @Override    public boolean equals(Object object) {        // TODO: Warning - this method won't work in the case the id fields are not set        if (!(object instanceof Category)) {            return false;        }        Category other = (Category) object;        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {            return false;        }        return true;    }
    @Override    public String toString() {        return "be.com.devmedia.entity.Category[id=" + id + "]";    }}
E OS TESTES 

public class ProductSessionTest {
    public static int idOfCategory1;    public static int idOfCategory2;    public static int idOfProduct1;    public static int idOfProduct2;    public static int idOfProduct3;
    public ProductSessionTest() {    }
    @BeforeClass    public static void setUpClass() throws Exception {    }
    @AfterClass    public static void tearDownClass() throws Exception {    }
    @Before    public void setUp() {    }
    @After    public void tearDown() {    }
    /**     * Test of saveCategory method, of class ProductSession.     */    @Test    public void testSaveCategory() throws Exception {        System.out.println("saveCategory");
        Category cat1 = new Category();        cat1.setActive(true);        cat1.setName("Categoria 1");
        Category cat2 = new Category();        cat2.setActive(false);        cat2.setName("Categoria 2");

        ProductSession instance = getProductSession();
        idOfCategory1 = instance.saveCategory(cat1).getId();        idOfCategory2 = instance.saveCategory(cat2).getId();
        cat1 = null;        cat2 = null;
        cat1 = instance.getCategoryById(idOfCategory1);        cat2 = instance.getCategoryById(idOfCategory2);
        assertNotNull(cat1);        assertNotNull(cat2);        assertEquals(cat1.getName(), "Categoria 1");        assertEquals(cat2.getName(), "Categoria 2");    }
    /**     * Test of setCategory method, of class ProductSession.     */    @Test    public void testSetCategory() throws Exception {        System.out.println("setCategory");
        ProductSession instance = getProductSession();
        Category cat1 = instance.getCategoryById(idOfCategory1);        Category cat2 = instance.getCategoryById(idOfCategory2);
        cat1.setName("The Changed Category 1");        cat2.setName("The Category 2 its changed too");
        instance.setCategory(cat1);        instance.setCategory(cat2);
        cat1 = null;        cat2 = null;
        cat1 = instance.getCategoryById(idOfCategory1);        cat2 = instance.getCategoryById(idOfCategory2);
        assertNotNull(cat1);        assertNotNull(cat2);        assertEquals(cat1.getName(), "The Changed Category 1");        assertEquals(cat2.getName(), "The Category 2 its changed too");    }
    /**     * Test of saveProduct method, of class ProductSession.     */    @Test    public void testSaveProduct() throws Exception {        System.out.println("saveProduct");
        ProductSession instance = getProductSession();
        Product prod1 = new Product();        prod1.setCategory(instance.getCategoryById(idOfCategory1));        prod1.setCost(new BigDecimal("10.2"));        prod1.setName("Product1");        prod1.setStock(100);        prod1.setSpec("spec 1");
        Product prod2 = new Product();        prod2.setCategory(instance.getCategoryById(idOfCategory2));        prod2.setCost(new BigDecimal("300.34"));        prod2.setName("Product2");        prod2.setStock(1);        prod2.setSpec("spec 2");
        Product prod3 = new Product();        prod3.setCategory(instance.getCategoryById(idOfCategory1));        prod3.setCost(new BigDecimal("500.34"));        prod3.setName("Product3");        prod3.setStock(1);        prod3.setSpec("spec 3");
        idOfProduct1 = instance.saveProduct(prod1).getId();        idOfProduct2 = instance.saveProduct(prod2).getId();        idOfProduct3 = instance.saveProduct(prod3).getId();
        assertNotNull(idOfProduct1);        assertNotNull(idOfProduct2);        assertNotNull(idOfProduct3);        assertTrue(idOfProduct1 >= 1);        assertTrue(idOfProduct2 >= 1);        assertTrue(idOfProduct3 >= 1);    }
    /**     * Test of setProduct method, of class ProductSession.     */    @Test    public void testSetProduct() throws Exception {        System.out.println("setProduct");
        ProductSession instance = getProductSession();
        Product prod1 = instance.getProductById(idOfProduct1);        Product prod2 = instance.getProductById(idOfProduct2);        Product prod3 = instance.getProductById(idOfProduct3);

        prod1.setName("Product 1 CHANGED");        prod2.setName("Product 2 CHANGED");        prod3.setName("Product 3 CHANGED");
        instance.setProduct(prod1);        instance.setProduct(prod2);        instance.setProduct(prod3);
        prod1 = instance.getProductById(idOfProduct1);        prod2 = instance.getProductById(idOfProduct2);        prod3 = instance.getProductById(idOfProduct3);
        assertNotNull(prod1);        assertNotNull(prod2);        assertNotNull(prod3);        assertEquals(prod1.getName(), "Product 1 CHANGED");        assertEquals(prod2.getName(), "Product 2 CHANGED");        assertEquals(prod3.getName(), "Product 3 CHANGED");    }
    /**     * Test of getAllProduct method, of class ProductSession.     */    @Test    public void testGetAllProduct() throws Exception {        System.out.println("getAllProduct");
        ProductSession instance = getProductSession();
        List result = instance.getAllProduct();        assertNotNull(result);        assertTrue(result.size() == 3);    }
    /**     * Test of getProductByName method, of class ProductSession.     */    @Test    public void testGetProductByName() throws Exception {        System.out.println("getProductByName");        String nameOfProduct = "Product";        ProductSession instance = getProductSession();
        List result = instance.getProductByName(nameOfProduct);        System.out.println("VEIO: " + result.size() + " E ESPERO: 3");        assertNotNull(result);        assertTrue(result.size() == 3);
        List result2 = instance.getProductByName(nameOfProduct + " 1");        System.out.println("VEIO: " + result2.size() + " E ESPERO: 1");        assertNotNull(result2);        assertTrue(result2.size() == 1);
        List result3 = instance.getProductByName("Um produto que nao existe");
        System.out.println("VEIO: " + result3.size() + " E ESPERO: 1");        assertNotNull(result3);        assertTrue(result3.isEmpty());    }
    /**     * Test of getProductWithLowStock method, of class ProductSession.     */    @Test    public void testGetProductWithLowStock() throws Exception {        System.out.println("getProductWithLowStock");
        ProductSession instance = getProductSession();
        List result = instance.getProductWithLowStock();        assertTrue(result.size() == 1);    }
    /**     * Test of isProductWithHigthStock method, of class ProductSession.     */    @Test    public void testIsProductWithHigthStock() throws Exception {        System.out.println("isProductWithHigthStock");
        ProductSession instance = getProductSession();
        boolean result1 = instance.isProductWithHigthStock(idOfProduct1);        boolean result2 = instance.isProductWithHigthStock(idOfProduct2);        boolean result3 = instance.isProductWithHigthStock(idOfProduct3);
        assertTrue(result1);        assertFalse(result2);        assertFalse(result3);    }
    /**     * Test of getProductById method, of class ProductSession.     */    @Test    public void testGetProductById() throws Exception {        System.out.println("getProductById");        ProductSession instance = getProductSession();
        Product result = instance.getProductById(idOfProduct3);        assertEquals(result.getName(), "Product 3 CHANGED");    }
    /**     * Test of getAllCategories method, of class ProductSession.     */    @Test    public void testGetAllCategories() throws Exception {        System.out.println("getAllCategories");        ProductSession instance = getProductSession();
        List result = instance.getAllCategories();        assertTrue(result.size() == 2);    }
    /**     * Test of getActiveCategories method, of class ProductSession.     */    @Test    public void testGetActiveCategories() throws Exception {        System.out.println("getActiveCategories");        ProductSession instance = getProductSession();
        List result = instance.getActiveCategories();
        assertTrue(result.size() == 1);    }
    /**     * Test of getCategoryById method, of class ProductSession.     */    @Test    public void testGetCategoryById() throws Exception {        System.out.println("getCategoryById");
        ProductSession instance = getProductSession();
        Category result = instance.getCategoryById(idOfCategory2);
        assertNotNull(result);        assertEquals(result.getName(), "The Category 2 its changed too");    }
    /**     * Test of addNotifiableUserOnAvaliable method, of class ProductSession.     */    @Test    public void testAddNotifiableUserOnAvaliable() throws Exception {        System.out.println("addNotifiableUserOnAvaliable");
        ProductSession instance = getProductSession();
        String email = "wagnerfaria1601@gmail.com";        Product prod = instance.getProductById(idOfProduct1);        CallOnAvaliable coa = new CallOnAvaliable();        coa.setEmail(email);        coa.setProduct(prod);        CallOnAvaliable result = instance.addNotifiableUserOnAvaliable(email, prod);        assertNotNull(result);        assertTrue(result.getId() >= 1);    }
    /**     * Test of callTheUserOnProductAvaliable method, of class ProductSession.     */    @Test    public void testCallTheUserOnProductAvaliable() throws Exception {        System.out.println("callTheUserOnProductAvaliable");        ProductSession instance = getProductSession();
        int called = instance.getNumberOfCalledUsersOnProductAvaliable();        assertTrue(called == 1);        instance.callTheUserOnProductAvaliable();        called = instance.getNumberOfCalledUsersOnProductAvaliable();        assertTrue(called == 0);    }
    /**     * Test of removeProduct method, of class ProductSession.     */    @Test    public void testRemoveProduct() throws Exception {        System.out.println("removeProduct");        ProductSession instance = getProductSession();
        Product prod1 = instance.getProductById(idOfProduct1);        Product prod2 = instance.getProductById(idOfProduct2);        Product prod3 = instance.getProductById(idOfProduct3);
        instance.removeProduct(prod1);        instance.removeProduct(prod2);        instance.removeProduct(prod3);
        assertNull(instance.getProductById(idOfProduct1));        assertNull(instance.getProductById(idOfProduct2));        assertNull(instance.getProductById(idOfProduct3));    }
    /**     * Test of removeCategory method, of class ProductSession.     */    @Test    public void testRemoveCategory() throws Exception {        System.out.println("removeCategory");        ProductSession instance = getProductSession();
        Category cat1 = instance.getCategoryById(idOfCategory1);        Category cat2 = instance.getCategoryById(idOfCategory2);
        instance.removeCategory(cat1);        instance.removeCategory(cat2);
        assertNull(instance.getCategoryById(idOfCategory1));        assertNull(instance.getCategoryById(idOfCategory2));    }
    private ProductSession getProductSession() throws NamingException {        return (ProductSession) AllTests.container.getContext().lookup("java:global/classes/ProductSession");    }}


public class SellSessionTest {
    public static Integer idOfCategory1;    public static Integer idOfProduct1;    public static Integer idOfUser;    public static Integer idOfSell;
    public SellSessionTest() {    }
    @BeforeClass    public static void setUpClass() throws Exception {    }
    @AfterClass    public static void tearDownClass() throws Exception {    }
    @Before    public void setUp() {    }
    @After    public void tearDown() {    }
    /**     * Test of saveSell method, of class SellSession.     */    @Test    public void testSaveSell() throws Exception {        System.out.println("saveSell");        SellSession instance = getSellSession();        //A categoria        Category cat1 = new Category();        cat1.setActive(true);        cat1.setName("Categoria 1");        //O produto        Product prod1 = new Product();        prod1.setCategory(cat1);        prod1.setCost(new BigDecimal("10.2"));        prod1.setName("Product1");        prod1.setStock(100);        prod1.setSpec("spec 1");
        User us = new User();        us.setEmail("wagnerfaria1601@gmail.com");        us.setName("wagner faria");        us.setUsername("wagner");        us.setPassword("123");
        Address addr = new Address();        addr.setAddress("trav leonor borralho");        addr.setCountry(CountryType.BRASIL);        addr.setNumber(111);        addr.setNickname("principal");        addr.setPostalCode("78005-650");        addr.setStateOfAddress("Mato Grosso");        us.addAddress(addr);
        CreditCard cc = new CreditCard();        cc.setDateOfValidation(new Date());        cc.setFlag(FlagType.VISA);        cc.setNameOfCardOwner("WAGNER");        cc.setNumber("1254125632563");        cc.setTimes(1);        cc.setUserOf(us);        us.addCreditCard(cc);
        Sell sell = new Sell();        sell.setAddressToSend(addr);        sell.setUserOf(us);        SellItem item = new SellItem();        item.setProduct(prod1);        item.setQnt(1);        sell.setCreditCard(cc);        cc.getSells().add(sell);        sell.addItem(item);
        Sell result = instance.saveSell(sell);        assertNotNull(result);        assertTrue(result.getId() > 0);
        idOfCategory1 = cat1.getId();        idOfProduct1 = prod1.getId();        idOfUser = us.getId();        idOfSell = sell.getId();    }
    /**     * Test of getSell method, of class SellSession.     */    @Test    public void testGetSell() throws Exception {        System.out.println("getSell");        SellSession instance = getSellSession();        Sell result = instance.getSell(idOfSell);
        assertNotNull(result);        assertEquals(idOfSell, result.getId());    }
    /**     * Test of setSell method, of class SellSession.     */    @Test    public void testSetSell() throws Exception {        System.out.println("setSell");        SellSession instance = getSellSession();        Sell sell = instance.getSell(idOfSell);        sell.setTotal(BigDecimal.valueOf(6565));
        Sell result = instance.setSell(sell);        assertEquals(BigDecimal.valueOf(6565), result.getTotal());    }
    /**     * Test of isCreditCardValidForSell method, of class SellSession.     */    @Test    public void testIsCreditCardValidForSell() throws Exception {        System.out.println("isCreditCardValidForSell");        SellSession instance = getSellSession();        Sell sell = instance.getSell(idOfSell);        boolean expResult = true;        boolean result = instance.isCreditCardValidForSell(sell);        assertEquals(expResult, result);    }
    /**     * Test of setStatusOfSell method, of class SellSession.     */    @Test    public void testSetStatusOfSell() throws Exception {        System.out.println("setStatusOfSell");        SellSession instance = getSellSession();
        Sell sell = instance.getSell(idOfSell);        StatusSellType status = StatusSellType.INPROGRESS;        instance.setStatusOfSell(sell, status);
        sell = instance.getSell(idOfSell);        assertNotNull(sell.getStatus());        assertEquals(StatusSellType.INPROGRESS, sell.getStatus());    }
    /**     * Test of getSellByDate method, of class SellSession.     */    @Test    public void testGetSellByDate() throws Exception {        System.out.println("getSellByDate");        SellSession instance = getSellSession();        Date start = new Date();        Date end = new Date();        List result = instance.getSellByDate(start, end);        assertNotNull(result);        assertTrue(result.size() == 1);    }
    /**     * Test of getSellByUser method, of class SellSession.     */    @Test    public void testGetSellByUser() throws Exception {        System.out.println("getSellByUser");        SellSession instance = getSellSession();        User usr = instance.getSell(idOfSell).getUserOf();        List result = instance.getSellByUser(usr);        assertNotNull(result);        assertTrue(result.size() >= 1);    }
    /**     * Test of getSellByStatus method, of class SellSession.     */    @Test    public void testGetSellByStatus() throws Exception {        System.out.println("getSellByStatus");        SellSession instance = getSellSession();        List result = instance.getSellByStatus(StatusSellType.VALID);        assertTrue(result.isEmpty());        result = instance.getSellByStatus(StatusSellType.INPROGRESS);        assertTrue(result.size() >= 1);    }
    /**     * Test of getlastSellesProducts method, of class SellSession.     */    @Test    public void testGetlastSellesProducts() throws Exception {        System.out.println("getlastSellesProducts");        SellSession instance = getSellSession();        List result = instance.getlastSellesProducts();        Sell sell = instance.getSell(idOfSell);        assertEquals(result.get(0), sell.getSellItens().get(0).getProduct());    }
    /**     * Test of closeSell method, of class SellSession.     */    @Test    public void testCloseSell() throws Exception {        System.out.println("closeSell");        SellSession instance = getSellSession();        Sell sell = instance.getSell(idOfSell);
        Sell result = instance.closeSell(sell);        assertTrue(result.isClosed());        assertEquals(result.getStatus(), StatusSellType.DONE);    }
    /**     * Test of confirmSell method, of class SellSession.     *///    @Test//    public void testConfirmSell() throws Exception {//        System.out.println("confirmSell");//        Sell sell = null;//        SellSession instance = getSellSession();//        instance.confirmSell(sell);//    }    /**     * Test of removeSell method, of class SellSession.     */    @Test    public void testRemoveSell() throws Exception {        System.out.println("removeSell");        SellSession instance = getSellSession();        Sell sell = instance.getSell(idOfSell);        instance.removeSell(sell);        System.out.println("PK da venda: " + sell.getId());        sell = instance.getSell(idOfSell);        assertNull(sell);    }
    private SellSession getSellSession() throws NamingException {        return (SellSession) AllTests.container.getContext().lookup("java:global/classes/SellSession");    }}
Wagner Amaral

Wagner Amaral

Responder

Posts

17/01/2011

Robson Teixeira

Olá Wagner

  verifique a sua tabela no banco de dados pois pode ocorrer de que o gerador de id  no caso no de categoria pode gerar o valor 5 conforme a query mostrada,o gerador ou sequence não se preucupa em ver se o valor gerado ja existe na tabela.

att
  Robson Passarella Teixeira
Responder

18/01/2011

Wagner Amaral

a questão é que ele não deveria gerar um novo ID para categoria... ele simplesmente não deveria tentar persistir a categoria em cascata! a categoria já possue ID e eu estou usando o persist de "Product".
os registros da tabela SEQUENCE são apagados a cada vez que o teste é finalizado. 
Quem quiser o código fonte do projeto, poste o email que eu envio ... pra poder dar uma olhada melhor no projeto!
tentei fazer o upload aqui mas não consegui =/
Responder

18/01/2011

Wagner Amaral

Alguem que já tiver feito pelo menos até a aula 31 ... me manda o projeto para o email wagnerfaria1601@gmail.comou pelo menos posta a classe Product aqui! eu acho que o problema deve ser nela ... mas eu sou iniciante em java ... posso ta bem enganado tb 
Responder

18/01/2011

Robson Teixeira

Olá Wagner

  ja que você está seguindo as videos aulas do dyego no seu persisntece.xml você manda apagar as tabelas do banco??nas video aulas e configurado com a opção de apagar e criar as tabelas e volto a insistir no seu banco pois eu acompanhei esse curso (Dyego parabens suas aulas são execelentes sou seu fã!!!) verifique seu persistence segue minha classe de Product.

@Entity
@Table(name="PRODUTOS")
@NamedQueries({
    @NamedQuery(name="Produto.findProdutosByName",query="SELECT prod FROM Produto prod where prod.nome like :productName")
})
public class Product implements IEntity,Serializable{

    @Id
    @SequenceGenerator(name = "PRODUTO_GENERATOR", sequenceName = "public.produtoSequence", initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="PRODUTO_GENERATOR")
    @Column(name="SEQ_PRODUTO")
    private Long id;
    @NotNull
    @NotEmpty
    @Column(unique=true,nullable=false)
    private String nome;
    @NotNull
    @Column(nullable=false)
    private BigDecimal custo;
    @NotNull(message="Favor Selecione 1 categoria!!")
    @ManyToOne(cascade=CascadeType.MERGE)
    @JoinColumn(name="ID_CATEGORIA",referencedColumnName="SEQ_CATEGORIA")
 //   @Valid
    private Categoria categoria;
    @NotNull
    @NotEmpty
    @Column(name="ESPECIFICACOES")
    private String especificacao;
    @NotNull
    @Min(value=0,message="Favor Informe a quantidade do produto!!")
    @Column(name="QUANTIDADE_ESTOQUIE",nullable=false)
    private Integer stock;
    @OneToMany(cascade=CascadeType.ALL,mappedBy="produto")
    private List<ItemVenda> itensVenda;
    @OneToMany(cascade=CascadeType.ALL,mappedBy="produto",orphanRemoval=true)
    private List<CallOnAvaliable>callers;
   
    @Override
    public Long getId() {
        return this.id;
    }
   
    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }
   
    public BigDecimal getCusto() {
        return custo;
    }

    public void setCusto(BigDecimal custo) {
        this.custo = custo;
    }
   
    public String getEspecificacao() {
        return especificacao;
    }

    public void setEspecificacao(String especificacao) {
        this.especificacao = especificacao;
    }
   
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
   
    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }
  
    public List<ItemVenda> getItensVenda() {
        if(itensVenda==null){
            itensVenda=new LinkedList<ItemVenda>();
        }
        return itensVenda;
    }

    public void setItensVenda(List<ItemVenda> itensVenda) {
        this.itensVenda = itensVenda;
    }

    public List<CallOnAvaliable> getCallers() {
        if(callers==null){
            callers=new LinkedList<CallOnAvaliable>();
        }
        return callers;
    }

    public void setCallers(List<CallOnAvaliable> callers) {
        this.callers = callers;
    }

    public void addCaller(CallOnAvaliable call){
        call.setProduto(this);
        getCallers().add(call);
    }
}

e do mysql eu passei tb para o postGrest.

a logica e a mesmas wagner.

att
  Robson Passarella Teixeira


Responder

26/01/2011

Dyego Carmo

Deu certo ?

ps: Valeu !
Responder

26/01/2011

Wagner Amaral


  por favor dyego ... disponibiliza o codigo do projeto pra download ai ... ou me manda por email ... eu sou iniciante e não to conseguindo resolver. que dai eu analiso o codigo fonte!
meu email eh: wagnerfaria1601@gmail.com
Responder

16/02/2011

Emerson Contiero

Tive o mesmo problema, resolvi tirando o cascade da coluna category na entidade product e fazendo o seguinte na no SellSessionTest:

    @Test
    public final void testSaveSell() throws Exception {
        System.out.println("saveSell");

        ProductSession instProduct = getProductSession();
       
        // The Category
        Category cat1 = new Category();
        cat1.setActive(true);
        cat1.setName("Categoria 1");
       
        idOfCategory = instProduct.saveCategory(cat1).getId();

        // The Product
        Product prod1 = new Product();
        prod1.setCategory(instProduct.getCategoryById(idOfCategory));
        prod1.setCost(new BigDecimal("10.2"));
        prod1.setName("Product 1");
        prod1.setStock(100);
        prod1.setSpec("Spec 1");
       
        idOfProduct = instProduct.saveProduct(prod1).getId();
       
       
        // The User   
        User us = new User();
        us.setEmail("enconti@gmail.com");
        us.setName("Emerson Contiero");
        us.setPassword("123");
        us.setUsername("emerson");
       
        Address addr = new Address();
        addr.setAddress("Rua Reseda");
        addr.setCity("Osasco");
        addr.setCountry(CountryType.BRASIL);
        addr.setNumber(148);
        addr.setState("SP");
        addr.setPostalcode("06120-150");
        addr.setNickname("Principal");
        us.addAddress(addr);

        CreditCard cc = new CreditCard();
        cc.setDateValidation(new Date());
        cc.setFlag(FlagType.VISA);
        cc.setNameOfCard("Emerson Contiero");
        cc.setNumber("1234567891234567");
        cc.setTimes(1);
        us.addCreditCard(cc);

        SellItem item = new SellItem();
        item.setProduct(instProduct.getProductById(idOfProduct));
        item.setQnt(1);

        SellSession instance = getSellSession();

        Sell sell = new Sell();
        sell.setAdressToSend(addr);
        sell.setUserOf(us);
        sell.setCreditcard(cc);
        cc.getSells().add(sell);
        sell.addItem(item);
       
        Sell result = instance.saveSell(sell);
       
        assertNotNull(result);
        assertTrue(result.getId() > 0);
       
        idOfUser = us.getId();
        idOfSell = sell.getId();
    }


    private ProductSession getProductSession() throws NamingException {
        ProductSession instance = (ProductSession) container.getContext().lookup("java:global/classes/ProductSession");
        return instance;
    }


Responder

24/02/2011

Dyego Carmo

O Codigo COMPLETO da loja virtual estará disponivel ainda neste mÊs... assim acabamos com todas as duvidas :)
Responder

24/02/2011

Wagner Amaral

OK! Obrigado!
Responder

04/03/2011

Dyego Carmo

O codigo fonte da aplicação está na aula 96 :)

Responder

26/04/2011

Ricardo Silva

Tive o mesmo problema, resolvi tirando o cascade da coluna category na entidade product e fazendo o seguinte na no SellSessionTest:

    @Test
    public final void testSaveSell() throws Exception {
        System.out.println("saveSell");

        ProductSession instProduct = getProductSession();
       
        // The Category
        Category cat1 = new Category();
        cat1.setActive(true);
        cat1.setName("Categoria 1");
       
        idOfCategory = instProduct.saveCategory(cat1).getId();

        // The Product
        Product prod1 = new Product();
        prod1.setCategory(instProduct.getCategoryById(idOfCategory));
        prod1.setCost(new BigDecimal("10.2"));
        prod1.setName("Product 1");
        prod1.setStock(100);
        prod1.setSpec("Spec 1");
       
        idOfProduct = instProduct.saveProduct(prod1).getId();
       
       
        // The User   
        User us = new User();
        us.setEmail("enconti@gmail.com");
        us.setName("Emerson Contiero");
        us.setPassword("123");
        us.setUsername("emerson");
       
        Address addr = new Address();
        addr.setAddress("Rua Reseda");
        addr.setCity("Osasco");
        addr.setCountry(CountryType.BRASIL);
        addr.setNumber(148);
        addr.setState("SP");
        addr.setPostalcode("06120-150");
        addr.setNickname("Principal");
        us.addAddress(addr);

        CreditCard cc = new CreditCard();
        cc.setDateValidation(new Date());
        cc.setFlag(FlagType.VISA);
        cc.setNameOfCard("Emerson Contiero");
        cc.setNumber("1234567891234567");
        cc.setTimes(1);
        us.addCreditCard(cc);

        SellItem item = new SellItem();
        item.setProduct(instProduct.getProductById(idOfProduct));
        item.setQnt(1);

        SellSession instance = getSellSession();

        Sell sell = new Sell();
        sell.setAdressToSend(addr);
        sell.setUserOf(us);
        sell.setCreditcard(cc);
        cc.getSells().add(sell);
        sell.addItem(item);
       
        Sell result = instance.saveSell(sell);
       
        assertNotNull(result);
        assertTrue(result.getId() > 0);
       
        idOfUser = us.getId();
        idOfSell = sell.getId();
    }


    private ProductSession getProductSession() throws NamingException {
        ProductSession instance = (ProductSession) container.getContext().lookup("java:global/classes/ProductSession");
        return instance;
    }




Dyego, posso até estar errado, mas não seria essa a solução definitiva do problema.

O Emerson Contiero chamou a minha atenção ao dizer que retirou o cascade da coluna category da entidade Product. Eu complementaria colocando um cascade do tipo "merge" na referência a Product da entidade Category @OneToMany(cascade=CascadeType.MERGE,mappedBy="category",orphanRemoval=true).

O que você acha?

Isso fecharia também o tópico "Vivendo um impasse JPA e Testes - Loja Virtual completa".
Responder

26/04/2011

Ricardo Silva

Tive o mesmo problema, resolvi tirando o cascade da coluna category na entidade product e fazendo o seguinte na no SellSessionTest:

    @Test
    public final void testSaveSell() throws Exception {
        System.out.println("saveSell");

        ProductSession instProduct = getProductSession();
       
        // The Category
        Category cat1 = new Category();
        cat1.setActive(true);
        cat1.setName("Categoria 1");
       
        idOfCategory = instProduct.saveCategory(cat1).getId();

        // The Product
        Product prod1 = new Product();
        prod1.setCategory(instProduct.getCategoryById(idOfCategory));
        prod1.setCost(new BigDecimal("10.2"));
        prod1.setName("Product 1");
        prod1.setStock(100);
        prod1.setSpec("Spec 1");
       
        idOfProduct = instProduct.saveProduct(prod1).getId();
       
       
        // The User   
        User us = new User();
        us.setEmail("enconti@gmail.com");
        us.setName("Emerson Contiero");
        us.setPassword("123");
        us.setUsername("emerson");
       
        Address addr = new Address();
        addr.setAddress("Rua Reseda");
        addr.setCity("Osasco");
        addr.setCountry(CountryType.BRASIL);
        addr.setNumber(148);
        addr.setState("SP");
        addr.setPostalcode("06120-150");
        addr.setNickname("Principal");
        us.addAddress(addr);

        CreditCard cc = new CreditCard();
        cc.setDateValidation(new Date());
        cc.setFlag(FlagType.VISA);
        cc.setNameOfCard("Emerson Contiero");
        cc.setNumber("1234567891234567");
        cc.setTimes(1);
        us.addCreditCard(cc);

        SellItem item = new SellItem();
        item.setProduct(instProduct.getProductById(idOfProduct));
        item.setQnt(1);

        SellSession instance = getSellSession();

        Sell sell = new Sell();
        sell.setAdressToSend(addr);
        sell.setUserOf(us);
        sell.setCreditcard(cc);
        cc.getSells().add(sell);
        sell.addItem(item);
       
        Sell result = instance.saveSell(sell);
       
        assertNotNull(result);
        assertTrue(result.getId() > 0);
       
        idOfUser = us.getId();
        idOfSell = sell.getId();
    }


    private ProductSession getProductSession() throws NamingException {
        ProductSession instance = (ProductSession) container.getContext().lookup("java:global/classes/ProductSession");
        return instance;
    }




Dyego, posso até estar errado, mas não seria essa a solução definitiva do problema.

O Emerson Contiero chamou a minha atenção ao dizer que retirou o cascade da coluna category da entidade Product. Eu complementaria colocando um cascade do tipo "merge" na referência a Product da entidade Category @OneToMany(cascade=CascadeType.MERGE,mappedBy="category",orphanRemoval=true).

O que você acha?

Isso fecharia também o tópico "Vivendo um impasse JPA e Testes - Loja Virtual completa".


Favor desconsiderar a frase onde é citado @OneToMany(cascade=CascadeType.MERGE,mappedBy="category",orphanRemoval=true). No meu entendimento, a solução o Emerson atende plenamente.
Responder

29/09/2011

Gengis-kan

Boa noite pessoal estou tendo o mesmo problema da rapaziada!

Se faço assim:

@NotNull
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(referencedColumnName="id", columnDefinition="integer")
@Valid
private Category category;

o teste da ProductSessionTest passa e a SellSessionTest dá problema


@NotNull
@ManyToOne()
@JoinColumn(referencedColumnName="id", columnDefinition="integer")
@Valid
private Category category;
No caso acima, o erro se inverte.. SellSessionTest roda numa boa, porém a ProductSessionTest dá pau! hehe
Continuamos na história do "impasse" relatada por outro colega nos foruns aqui do devmedia...rsrs

Enfim. Não consegui achar uma explicação lógica nesse problema. Se alguém tiver? Aguardo anciosamente!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar