我正在尝试保留一个实体。当我使用 native 查询向我的表中插入一行时,它工作正常,但是当我使用 EntityManager persist 方法插入实体时,我收到一个错误,提示该查询好像它在语法上是错误的。
下面是我的实体类:
import javax.persistence.*;
import java.util.Date;
@Entity
public class Media {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "media_location")
private String mediaLocation;
@Column(name = "media_location_url")
private boolean fromUrl = false;
@Column(name = "date")
private Date uploadDate;
@Column(name = "description")
private String description;
public Media() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMediaLocation() {
return mediaLocation;
}
public void setMediaLocation(String mediaLocation) {
this.mediaLocation = mediaLocation;
}
public boolean isFromUrl() {
return fromUrl;
}
public void setFromUrl(boolean fromUrl) {
this.fromUrl = fromUrl;
}
public Date getUploadDate() {
return uploadDate;
}
public void setUploadDate(Date uploadDate) {
this.uploadDate = uploadDate;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
我的经理类如下:
@Stateless
public class UserManager {
@EJB
private BaseDao baseDao;
public String createNewMedia_test() {
Media media = new Media();
media.setFromUrl(false);
media.setDescription("adsddfsd");
media.setMediaLocation("here");
media.setUploadDate(new Date());
baseDao.saveMedia(media);
return "OK";
}
}
BaseDao 如下所示:
@Stateless
public class BaseDao {
@PersistenceContext(unitName="MySqlDS")
private EntityManager entityManager;
public void saveMedia(Media media) {
entityManager.persist(media);
}
}
但是在持续调用时我得到了错误,在我的本地主机 web ui 中我看到了以
开头的堆栈跟踪Query String:null
Stack Trace
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
最佳答案
我认为您需要在 Hibernate 事务 中调用 persist()
。尝试将对 persist()
的调用包装在事务中,如以下代码片段所示:
@Stateless
public class BaseDao {
@PersistenceContext(unitName="MySqlDS")
private EntityManager entityManager;
public void saveMedia(Media media) {
entityManager.getTransaction().begin();
entityManager.persist(media);
entityManager.getTransaction().commit();
}
}
关于java - hibernate - SQLGrammarException : could not extract ResultSet on Persist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33728794/