Hibernate EntityManager合并/持久化问题

Hibernate EntityManager合并/持久化问题,hibernate,spring,merge,persist,Hibernate,Spring,Merge,Persist,我遇到了一个奇怪的问题,我的merge()或persist()函数没有反映在数据库中。 My JdbcProductDao.java: @Repository("productDao") public class JdbcProductDao implements ProductDao { @PersistenceContext private EntityManager entityManager; public JdbcProductDao(){ }

我遇到了一个奇怪的问题,我的merge()或persist()函数没有反映在数据库中。 My JdbcProductDao.java:

@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);
    }
}

这可能不是您需要的答案,但是,既然您已经在使用Spring,为什么不使用Spring持久化模板(例如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);
}
@覆盖
@抑制警告(“未选中”)
公共列表findAll(){
返回jpaTemplate.find(“来自样本”);
}
@凌驾
公共样本findById(长样本ID){
返回jpaTemplate.find(Sample.class,sampleId);
}
@凌驾
公共样本库(样本dp){
返回jpaTemplate.merge(dp);
}

这可能不是您需要的答案,但既然您已经在使用Spring,为什么不使用Spring持久化模板(例如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);
}
@覆盖
@抑制警告(“未选中”)
公共列表findAll(){
返回jpaTemplate.find(“来自样本”);
}
@凌驾
公共样本findById(长样本ID){
返回jpaTemplate.find(Sample.class,sampleId);
}
@凌驾
公共样本库(样本dp){
返回jpaTemplate.merge(dp);
}
尝试在EntityManager persist()之后调用flush()方法

尝试在EntityManager persist()之后调用flush()方法


谢谢你的评论,但我决定改用jpadaosupport谢谢你的评论,但我决定改用jpadaosupport
public void persist(Product product){
    getEntityManager().persist(product);
    getEntityManager().flush();
}