Ca fonctionne en bytea.
En blob, j'ai une exception (en lecture, et pas a l'enregistrement) :
org.postgresql.util.PSQLException: Les Large Objects ne devraient pas être utilisés en mode auto-commit. at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:200) at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:172) at org.postgresql.jdbc2.AbstractJdbc2BlobClob.<init>(AbstractJdbc2BlobClob.java:47) at org.postgresql.jdbc2.AbstractJdbc2Blob.<init>(AbstractJdbc2Blob.java:21) at org.postgresql.jdbc3.AbstractJdbc3Blob.<init>(AbstractJdbc3Blob.java:19) at org.postgresql.jdbc4.AbstractJdbc4Blob.<init>(AbstractJdbc4Blob.java:20) at org.postgresql.jdbc4.Jdbc4Blob.<init>(Jdbc4Blob.java:20) at org.postgresql.jdbc4.Jdbc4ResultSet.getBlob(Jdbc4ResultSet.java:52) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultSet.java:336) at com.mchange.v2.c3p0.impl.NewProxyResultSet.getBlob(NewProxyResultSet.java:285)
Pourtant cantharella n'est pas configuré en autocommit.
Dans notre cas de fichier peu volumineux (cf. limitation de taille définie dans les spécs.), les deux alternatives peuvent convenir. La principale différence étant que pour bytea, les données restent dans une colonne de la table tandis que pour les BLOB, les données sont externalisées dans une table système et référencées par un oid. D'un côté, Bytea semblent être plus facile à mettre en place mais pourrait engendrer certains problèmes de performance lors de requête sur l'ensemble des documents (preload), de l'autre BLOB semble garder toujours de bonnes performances (on demand) même avec des données plus volumineuses mais nécessite de mettre en place un système de suppression automatique des BLOB lorsque la référence (oid) est supprimé (trigger, rule). Je reste en bytea (lazy pour l'instant): @Basic(fetch = FetchType.LAZY) private byte[] fileContent; Je suis en train d'essayer de passer en oid pour vérifier si cela améliore les
Le 14/02/2013 12:12, Eric Chatellier a écrit : performances. Par contre, j'ai toujours l'exception : org.postgresql.util.PSQLException: Les Large Objects ne devraient pas être utilisés en mode auto-commit. et impossible à résoudre :( -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28