EntityManager는 문제를 병합/지속합니다
문제
내 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);
}
제휴하지 않습니다 StackOverflow