2017-02-09 2 views
0

J'ai app JavaEE, la principale travaille sur docker avec PostgreSQL, tests fonctionnent avec HSQLDB,requête SQL pour le jour de la semaine en Java EE - HSQLDB vs Postgres

Dans une requête que je veux vérifier la journée de la semaine (pour exclure des week-ends à partir des données recueillies)

dans Postgres les travaux suivants:

extract(dow from date) != 0 AND extract(dow from date) != 6 

Quand avec HSQLDB cela se traduit par:

Internal Exception: java.sql.SQLSyntaxErrorException: unexpected token: DOW

Pour HSQLDB je besoin d'utiliser:

DAYOFWEEK(date) != 1 AND DAYOFWEEK(date) != 7 

Mais cela bien sûr ne fonctionne pas avec PostgreSQL:

Caused by: org.postgresql.util.PSQLException: ERROR: function dayofweek(date) does not exist

Toute idée comment unifier cela?

Je suppose, pour définir le même type de DB dans persistance.xml resources.xml pour les tests et les applications? Mais je me demande s'il y a une fonction SQL que je pourrais utiliser pour les deux, sans ré-éditer les fichiers xml?

+0

Un autre bon exemple sur pourquoi exécuter des tests sur un SGBD différent de celui de production n'est pas une bonne idée. –

+2

Pourriez-vous essayer la fonction JDBC d'échappement '{fn DAYOFWEEK (date)}'. En théorie, tous les pilotes JDBC doivent se déconnecter de la fonction spécifique à la base de données, mais ce n'est pas toujours le cas. –

+0

BTW: La plage de cette fonction d'échappement devrait être 1..7, avec 1 étant dimanche. –

Répondre

0

résolu:

je JPQL NamedQuery (j'utilisais NativeQuery) avec le paramètre passé de la liste des LocalDates (avec week-ends + jours fériés),

dans la requête, dans la section WHERE J'ai tapé:

'myDay not in :listOfWeekendsAndHolidays' 
0

Je viens de vérifier la suggestion de Mark utiliser JDBC escapes et les travaux suivants à la fois HSQLDB et Postgres:

{fn DAYOFWEEK(date)} <> 0 AND {fn DAYOFWEEK(date)} <> 6