문제

내 merge () 또는 my persist () 함수가 데이터베이스에 반영되지 않는이 이상한 문제가 있습니다. 내 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);
    }
}

나의 getProductList() 제대로 작동하지만 저장 제품은 데이터베이스에 아무것도하지 않습니다.

이것이 일어날 이유를 생각할 수 있습니까?

내 제품을 게시하겠습니다 .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();
    }
}
도움이 되었습니까?

해결책

EntityManager perist () 후에 Flush () 메소드를 호출하십시오.

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

다른 팁

이것은 필요한 대답이 아니지만 이미 스프링을 사용하고 있기 때문에 스프링 지속성 템플릿 (예 : jpatemplate)을 사용하여 DAO 수명을 단순화하지 않겠습니까? 내 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top