2017-04-06 43 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/

對不起,我現在沒有更多,希望它會把你放在正確的軌道上。