LOJA VIRTUAL COMPLETA - ERRO COM (cascade = CascadeType.ALL)
17/01/2011
0
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
Posts
17/01/2011
Robson Teixeira
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
18/01/2011
Wagner Amaral
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 =/
18/01/2011
Wagner Amaral
18/01/2011
Robson Teixeira
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
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
16/02/2011
Emerson Contiero
@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;
}
24/02/2011
Dyego Carmo
26/04/2011
Ricardo Silva
@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".
26/04/2011
Ricardo Silva
@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.
29/09/2011
Gengis-kan
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!
Clique aqui para fazer login e interagir na Comunidade :)