2016-05-13 14 views
0

現在、私は狂った問題に直面しています。カスタム識別子ジェネレータ

独自のIdentifierGeneratorを作成して、特定の形式のIDを管理したいと考えています。

public class CustomGenerator implements IdentifierGenerator { 

    private static final String REQUEST = "SELECT CURRVAL('sequence')"; 

    private final String prefixFormat = "PREFIX-%s"; 

    @Override 
    public Serializable generate(SessionImplementor session, Object object) throws HibernateException { 
     final String prefix = getPrefix(); 
     Session sessionHibernate = (Session) session; 
     Query query = sessionHibernate.createSQLQuery(REQUEST); 
     Object obj = query.uniqueResult(); 
     return null; 
    } 

    private String getPrefix() { 
     final Calendar date = Calendar.getInstance(); 
     DateFormat dateFormat = new SimpleDateFormat("yyyyMM"); 
     return String.format(prefixFormat, dateFormat.format(date.getTime())); 
    } 

} 

私のJUnitのテスト:

@Test 
@Transactional 
public void addEntity() { 
    final Entity entity= new Entity(); 
    final long count = this.entityRepository.count(); 

    this.entityRepository.saveAndFlush(rex); 

    assertEquals(count + 1, this.entityRepository.count()); 
} 

マイエンティティ:

@Entity 
@Table(name = "ENTITY") 
public class Entity { 

    @Id 
    @GenericGenerator(name = "sequence", strategy = "[...]CustomGenerator") 
    @GeneratedValue(generator = "sequence") 
    @Column(name = "ENTITY_ID") 
    private Integer entityId; 

    [...] 
} 

私のJUnitテストクラッシュ - スタックトレース:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [SELECT CURRVAL('sequence_rex_id')]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:238) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:221) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 

データベース:HSQLDB(テスト)、POSTGRESQL (生産)

誰にも分かりませんか?

ご迷惑をおかけして申し訳ありません。英語は私の母国語ではありません。

+0

私はHSQLDBからPOSTGRESQLにテストを移動し、問題は消えました。 問題はHSQLDB(2.3.2)の設定から来ていると思います。 –

答えて

0

SELECT CURRVAL('sequence')構文はPostgreSQLに固有のものです。 HSQLDBでPostgreSQL構文を使用する場合は、JDBC接続URLに必要なSQL構文フラグを含める必要があります。たとえば、jdbc:hsqldb:mem:test;sql.syntax_pgs=true

+0

それは問題を解決しない、私はまだ同じエラーがあります! –