2010-01-16 86 views
0

我遇到了這個奇怪的問題,我的merge()或我的persist()函數沒有被反映在數據庫中。 我JdbcProductDao.java:EntityManager合併/持久性問題

@Repository("productDao") 
public class JdbcProductDao implements ProductDao { 
    @PersistenceContext 
    private EntityManager entityManager; 

    public JdbcProductDao(){ 
    } 

    public Product getReference(Product product){ 
     return getEntityManager().getReference(product.getClass(),product.getId()); 
    } 

    public void persist(Product product){ 
     getEntityManager().persist(product); 
    } 

    public EntityManager getEntityManager(){ 
     return entityManager; 
    } 

    public void setEntityManager(EntityManager entityManager){ 
     this.entityManager = entityManager; 
    } 

    @SuppressWarnings("unchecked") 
    public List<Product> getProductList(){ 
     return getEntityManager().createQuery("from Product").getResultList(); 
    } 

    public void saveProduct(Product product){ 
     persist(product); 
    } 
} 

getProductList()工作正常,但是我saveProduct沒有做任何事情到數據庫。

你能想到爲什麼會發生這種情況?

我會後我的Product.java文件:

@Entity 
@Table(name="products") 

public class Product implements Serializable { 
    @Id 
    @Column(name = "id") 
    private int id; 
    @Column(name = "description") 
    private String description; 
    @Column(name = "price") 
    private Double price; 

    public void setId(int i) { 
     id = i; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public Double getPrice() { 
     return price; 
    } 

    public void setPrice(Double price) { 
     this.price = price; 
    } 

    public String toString() { 
     StringBuffer buffer = new StringBuffer(); 
     buffer.append("Description: " + description + ";"); 
     buffer.append("Price: " + price); 
     return buffer.toString(); 
    } 
} 

回答

4

嘗試調用flush()方法EntityManager的堅持()之後。

public void persist(Product product){ 
    getEntityManager().persist(product); 
    getEntityManager().flush(); 
} 
+0

感謝您的評論,但我決定只是切換到使用jpadaosupport – Albinoswordfish 2010-01-16 17:59:06

1

,這可能不是你所需要的答案,但,既然你已經使用Spring,爲什麼不使用Spring持久性模板簡化你的生活DAO (如jpaTemplate)。我的DAO的外觀像這樣:

@Override 
@SuppressWarnings("unchecked") 
public List<Sample> findAll() { 
    return jpaTemplate.find("from Sample"); 
} 

    @Override 
public Sample findById(Long sampleId) { 
    return jpaTemplate.find(Sample.class, sampleId); 
} 

    @Override 
public Sample store(Sample dp) { 
    return jpaTemplate.merge(dp); 
}