java - hibernate - SQLGrammarException : could not extract ResultSet on Persist

标签 java mysql hibernate jpa

我正在尝试保留一个实体。当我使用 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/

相关文章:

java - 如何使用Hibernate Lucene Search访问实体中外键的排序字段名称?

java - 通过应用获取表之间的父子关系

java - 我无法使用 Eclipse 安装适用于 Android 的 Crashlytics

php - 我声明的 id 是一个数组吗?

java - 使用 Maven 从 jar 运行我的 testNG 项目

MYSQL auto_increment_增量

mysql - 正则表达式获取单词中的重复字符

Spring 3.1 Hibernate 4 不回滚 JDBC 事务

java - Spring Data JPA 存储库抛出空指针

java - JOOQ 与 hibernate 行为