2010-01-16 100 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); 
}