2017-04-06 42 views
1

我有一个表格,说Book只有一个column(book_id)Serial。 我正在使用Informix和openejb 4.7.2。 当我试图创建数据库的新条目,我得到错误SQLGrammarException当使用JPA插入单列表作为序列时使用JPA

OpenEJB - EjbTransactionUtil.handleSystemException: org.hibernate.exception.SQLGrammarException: could not prepare statement 
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) ~[hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) ~[hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1316) ~[hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:881) ~[hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] 
    at org.apache.openejb.persistence.JtaEntityManager.persist(JtaEntityManager.java:149) ~[openejb-core-4.7.2.jar:4.7.2] 

Book.java

@Entity 
@Table(name = "book") 
public class Book { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "book_id", nullable = false) 
    private short bookId; 

    public short getBookId() { 
     return bookId; 
    } 

    public void setBookId(short bookId) { 
     this.bookId = bookId; 
    } 

} 

public class DocumentTemplateDAO{ 
    @Override 
    public Book create(Book entity) { 
     LOG.debug("Entity is created {} ", entity); 
     this.entityManager.persist(entity); 
     this.entityManager.flush(); 
     return entity; 
    } 
} 

代码来创建本书

Book book = new Book(); 
documentTemplateDAO.create(book); 

的查询将要执行的是

insert into book values ()

回答

0

2个可能的解决方案:

  • Informix的SERIAL(如果这是你的书ID是在数据库中的)需要一个零触发自动增量,应该影响@GeneratedValue(策略= GenerationType.AUTO )。

  • IBM为Informix开发了一个特定的Hibernate方言,您可以从这里下载:http://members.iiug.org/opensource/

对不起,我现在没有更多,希望它会把你放在正确的轨道上。