Bonjour à vous.
J'aimerai vous exposer un problème qui "persiste" depuis un moment dont je ne trouve la solution.
Je souhaiterai récupérer des images que j'ai pu enregistrer sur mon serveur mais j'ai droit à une erreur comme celle-ci
La table Image sous postGreSql 9.0
Code : Sélectionner tout - Visualiser dans une fenêtre à part javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not load an entity: [com.echange.model.offre.ImageOffre#4]
Son contenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 id bigserial NOT NULL, file_name character varying(255) NOT NULL, imagefile oid, offre bigint
id : filename : imagefile(oid) : offre (id)
4;"DSCF4045.JPG";19484;57
5;"DSCF4105.JPG";19485;57
6;"DSCF4125.JPG";19486;57
7;"DSCF4237.JPG";19491;76
8;"DSCF4246.JPG";19492;76
La classe associé , JPA 2.0
Vous remarquez que j'ai annoté l'image par @Lob. Qu'elle est chargé lors de la demande par FetchType.EAGER et que ma variable est de type byte[] (c'est une image, et j'enregistre sa valeur en byte[] )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 @Entity @Table(name = "offre_image", catalog = "public", uniqueConstraints = @UniqueConstraint(columnNames = {"id"})) public class ImageOffre implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; @ManyToOne @JoinColumn(name="offre",referencedColumnName="id") private Offre offre; @Column(name = "file_name", nullable = false) private String fileName; @Lob @Basic(fetch=FetchType.EAGER) // this gets ignored anyway, but it is recommended for blobs @Type(type="org.hibernate.type.PrimitiveByteArrayBlobType") protected byte[] imageFile;
J'ai ajouté un type qui spécifie que le blob est un byteArray
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
Avec ou sans, je n'arrive à récupérer mon entity.
J'ajoute dans mon persistence.xml
car j'utilise des oid est @Lob fournit des oid avec PostgreSQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <property name="hibernate.jdbc.use_streams_for_binary" value="false" />
Avec ou sans, je n'arrive à récupérer mon entity aussi.
J'ai toujours l'erreurQuand j'effectue cette requête suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not load an entity: [com.echange.model.offre.ImageOffre#4]
OR !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Query query = em.createNativeQuery("select id from offre_image where offre=:idOffre"); query.setParameter("idOffre",idOffre.getId()); List<ImageOffre> liC = new ArrayList<ImageOffre>(); List<BigInteger> li = query.getResultList(); if(li != null) { for(int i = 0; i < li.size(); i++) { ImageOffre imO = (ImageOffre)em.find(ImageOffre.class, Long.parseLong(li.get(i).toString())); liC.add(imO); } } return liC;
L'implémentation @Lob marche très bien dans mon autre table :
ici, faire un "from Offre where offre=:offre" me renvoie toutes mes données et mon image qui s'affiche très bien dans mon interface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 @Entity @Table(name = "offre_acces", catalog = "public", uniqueConstraints = @UniqueConstraint(columnNames = {"id"})) public class Offre implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; .... .... .... @Lob @Basic(fetch=FetchType.EAGER) // this gets ignored anyway, but it is recommended for blobs protected byte[] imageFile; @Column(name = "file_name") private String fileName; @Column(name = "images") @OneToMany(mappedBy="offre", cascade=CascadeType.ALL, targetEntity=ImageOffre.class, fetch=FetchType.LAZY) private List<ImageOffre> images;
Hors, il n'y a aucune différence de code avec ma classe entity ImageOffre (mise à part @Type, mais avec ou sans rien ne change)
Qu'en pensez vous ?
Partager