Closed pavei closed 13 years ago
Olá, tente fazer o seguinte: use os atributos como camel case, por exemplo, productCode, e na anotação column, coloque o valor name como product_code. Lembrando que, se sua coluna na tabela é exatamente o mesmo nome do seu atributo, a anotação @Column é desnecessária.
Deve resolver, de qualquer forma, obrigado por estar utilizando o AndOrm.
Em 02/08/2011 03:19, pavei escreveu:
Estou tentando implementar um exemplo bem simples com um DAO genérico em um cadastro de um produto. A base está no local.
Não sei o que posso estar fazendo de errado, segue o código e o erro mais abaixo
public class GenericDAO<E> implements DAO{ private Class classOfInstance; private PersistenceManager manager; public GenericDAO(Class<E> classOfInstance) { super(); this.classOfInstance = classOfInstance; this.manager = PMFactory.get(); } @Override public void save(Object object) { this.manager.save(object); } @Override public void update(Object object) { this.manager.update(object); } @Override public void remove(Object object) { this.manager.delete(object); } @Override public Object find(Integer id) { return this.manager.read(this.classOfInstance, id); } @Override public List findAll() { Criteria query = Criteria.from(this.classOfInstance); return manager.find(this.classOfInstance, query); } @Entity @Table(value="product") public class Product { @PrimaryKey @Column private Integer product_code; @Column private String product_name; private BigDecimal price; public Product() { super(); } public Product(Integer product_code, String product_name, BigDecimal price) { super(); this.product_code = product_code; this.product_name = product_name; this.price = price; } public Integer getProduct_code() { return product_code; } public void setProduct_code(Integer product_code) { this.product_code = product_code; } public String getProduct_name() { return product_name; } public void setProduct_name(String product_name) { this.product_name = product_name; } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } ----------------------------Insert em um activity ProductDAO d = new ProductDAO(Product.class); Product p = new Product(); p.setPrice(new BigDecimal(100)); p.setProduct_code(100); p.setProduct_name("Salame"); d.save(p); ----------------- Erro: 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): FATAL EXCEPTION: main 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.viniciuspavei/br.com.viniciuspavei.ProductRequestActivity}: java.lang.NullPointerException 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.os.Handler.dispatchMessage(Handler.java:99) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.os.Looper.loop(Looper.java:123) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread.main(ActivityThread.java:4627) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at java.lang.reflect.Method.invokeNative(Native Method) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at java.lang.reflect.Method.invoke(Method.java:521) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at dalvik.system.NativeStart.main(Native Method) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): Caused by: java.lang.NullPointerException 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at br.com.andorm.reflection.Invoker.withParams(Invoker.java:26) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at br.com.andorm.persistence.AndroidPersistenceManager.save(AndroidPersistenceManager.java:71) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at br.com.viniciuspavei.controller.GenericDAO.save(GenericDAO.java:22) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at br.com.viniciuspavei.ProductRequestActivity.onCreate(ProductRequestActivity.java:26) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-02 06:10:30.267: ERROR/AndroidRuntime(5690): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
Jonatas Daniel Hermann @jntsdaniel jonatasdaniel.wordpress.com
O mesmo erro continua..
@Entity
public class Product {
@PrimaryKey
@Column(name="product_code")
private Integer productCode;
@Column(name="product_name")
private String productName;
@Column(name="price")
private BigDecimal price;
public Product() {
// TODO Auto-generated constructor stub
}
public Integer getProductCode() {
return productCode;
}
public void setProductCode(Integer productCode) {
this.productCode = productCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
Se não for pedir demais, tens como testar usando Double em vez de BigDecimal? Creio que há um bug quando ele trabalha com BigDecimal, mas preciso dessa confirmação para fazermos então a correção.
PS: Nesse seu caso, as anotações @Column são desnecessárias, pois o framework converte os nomes automaticamente para esse padrão minúsculo com underline.
Colocando para Double funcinou corretamente.
Abraço
Ok, tens como criar uma nova issue específica para o problema do BigDecimal? De preferência em inglês, e coloque a tag 'bug' na issue. Grato.
Estou tentando implementar um exemplo bem simples com um DAO genérico em um cadastro de um produto. A base está no local.
Não sei o que posso estar fazendo de errado, segue o código e o erro mais abaixo